gpt4 book ai didi

Java后台 worker : Scope of Widget to be updated unclear

转载 作者:行者123 更新时间:2023-12-01 19:23:54 34 4
gpt4 key购买 nike

我试图理解org.jdesktop.swingx.BackgroundWorker的机制。他们的javadoc提供以下示例:

final JLabel label;
class MeaningOfLifeFinder implements BackgroundListener {
public void doInBackground(BackgroundEvent evt) {
String meaningOfLife = findTheMeaningOfLife();
evt.getWorker().publish(meaningOfLife);
}

public void process(BackgroundEvent evt) {
label.setText("" + evt.getData());
}

public void done(BackgroundEvent evt) {}
public void started(BackgroundEvent evt) {}
}

(new MeaningOfLifeFinder()).execute();

除了我怀疑结果是否会被发布之外,我想知道如何将 label 传递到正在更新的 process 方法。我认为它的范围仅限于 BackgroudListener 实现的外部。我很困惑......有什么答案可以给我吗?

提前致谢

最佳答案

这段代码显然已经过时并且不正确;此外,您必须将其放回到某个上下文中(我猜 MeaningOfLifeFinder 是在另一个类中定义的)。

它不会编译,因为 BackgroundListener 不存在(应该是 BackgroundWorker)并且是一个类而不是接口(interface),因此 implements这里不正确。

我认为该代码片段应该如下所示:

class Something {
final JLabel label;

Something() {
// Instantiate label here
}

class MeaningOfLifeFinder implements BackgroundWorker {
public void doInBackground(BackgroundEvent evt) {
String meaningOfLife = findTheMeaningOfLife();
evt.getWorker().publish(meaningOfLife);
}

public void process(BackgroundEvent evt) {
label.setText("" + evt.getData());
}

public void done(BackgroundEvent evt) {}
public void started(BackgroundEvent evt) {}
}

void someAction() {
(new MeaningOfLifeFinder()).execute();
}
}

这应该效果更好。在这种情况下,您会立即看到 MeaningOfLifeFinder 的实例如何能够访问标签(因为它可以访问其嵌入类的任何成员)。

您只需确保以某种方式调用someAction()(例如,通过用户操作)。

关于Java后台 worker : Scope of Widget to be updated unclear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2489097/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com