gpt4 book ai didi

java - 从 SwingWorker 执行 SwingWorker - 等到第一个停止

转载 作者:行者123 更新时间:2023-12-03 12:57:34 26 4
gpt4 key购买 nike

我正在尝试从另一个 SwingWorker (MainWorker) 执行 SwingWorker (SubWorker),然后我希望 MainWorker 等待 SubWorker 完成。同时,MainWorker 应该根据 SubWorker 的属性变化进行自我更新。

public class MainWorker extends SwingWorker<Void,Void>
{
public Void doInBackground()
{
SubWorker sw = new SubWorker();
sw.execute();
try {
network.get(); // wait for completion
} catch (Exception ex) {
}
return null;
}
}

问题是SubWorker 的doInBackground 方法在MainWorker 完成之前不会被调用,而MainWorker 正在等待SubWorker 完成。

如何让 SubWorker 与 MainWorker 的 Activity 并行运行?

最佳答案

如果你只有一个 sub-worker,我不确定有什么意义——你为什么不能在 SW 主体中执行任务?

如果您有多个并行的子任务,并且想要将它们分组并报告它们的进度,则您实际上并不需要单独的 SwingWorkers - 只需启动线程或使用执行程序来安排任务。如果要发布临时结果,请将阻塞队列传递给任务,它们将在其中推送更新。

主要(或更确切地说是唯一的)SwingWorker 将从该队列中获取项目并使用 publish()/process() 方法更新 GUI。当子任务完成工作时,它可以在队列中推送特殊 token (或为空)。这就是您可以跟踪未完成的子任务并决定何时终止循环的方式。

或者,如果您有一堆自包含任务,您可以使用 CompletionService 并以类似方式从 SW 更新状态。

关于java - 从 SwingWorker 执行 SwingWorker - 等到第一个停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996462/

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