gpt4 book ai didi

java - 在 SwingWorker 外部访问发布

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

当我的耗时代码位于未包含的方法中时,我无法找到调用 publish() 和/或 setProgress() 的方法在 SwingWorker 内。

举例说明:

class Task extends SwingWorker<Void, Void> {
@Override
protected void process(List<Void> chunks) {
// Process
}
@Override
protected Void doInBackground() throws Exception {
getData(this);
return null;
}
@Override
protected void done() {
// Done.
}
}

public Object[][] getData(SwingWorker worker) {
worker.publish(); // <-- publish() is protected, unavailable from outside.
worker.setProgress(1); // <-- same with setProgress().
return new Object[0][0];
}

此代码会引发编译器错误,因为 publish()setProgress() 受到保护,因此即使您拥有该对象也无法访问。

有什么解决方法吗?如果所有内容都需要包含在 SwingWorker 中才能发布,那将是不幸的。我的 getData() 任务非常耗时,我想向用户通报正在发生的情况。

希望这个问题有意义。

最佳答案

您始终可以为 SwingWorker 类提供其他类可以调用的公共(public)方法。这些可能就像 protected 方法之一的包装方法一样简单:

public void mySetProgress(int progress) {
super.setProgress(progress);
}
<小时/>

更好的方法:
另一种方法是重新考虑您的程序结构 - 让您的对象使用 getData(...) 方法返回 SwingWorker 可以通过某种观察机制监听的临时结果,然后让Worker 根据需要调用其发布方法。

<小时/>

编辑2
您在评论中指出:

Both are solutions I thought about but they both seem to have unfortunate consequences. My getData() method has about 20 steps that I'd like to publish through. Making a program structure that returns interim results would require me to break it up into smaller methods and pass along the results to each method.. Just seems like too much work =/

不,不需要额外的方法。 getData(...) 方法所需要做的就是定期更新类属性并通知监听器。然后,监听器(这里是您的 SwingWorker)可以提取类属性并使用它调用发布。

关于java - 在 SwingWorker 外部访问发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20033543/

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