我试图从另一个 SwingWorker (MainWorker) 执行一个 SwingWorker (SubWorker),然后我希望 MainWorker 等待 SubWorker 完成。同时,MainWorker 应该根据 SubWorker 的属性变化进行 self 更新。
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;
}
}
问题在于,直到 MainWorker 完成后才会调用 SubWorker 的 doInBackground 方法,而 MainWorker 正在等待 SubWorker 完成。
如何让 SubWorker 与 MainWorker 的 Activity 并行运行?
最佳答案
如果你只有一个子工作人员,我不确定有什么意义 - 为什么你不能只在 SW 主体中执行任务?
如果您有多个并行子任务,并且想要对它们进行分组并报告其进度,那么您实际上并不需要单独的 SwingWorkers - 只需启动线程或使用执行器来安排任务。如果要发布临时结果,请将阻塞队列传递给任务,任务将在其中推送更新。
主要(或者更确切地说是唯一)SwingWorker 将从该队列中获取项目并使用publish()/process() 方法更新GUI。当子任务完成工作时,它可以将特殊 token 推送到队列中(或为空)。这样您就可以跟踪未完成的子任务并决定何时终止循环。
或者,如果您有一堆独立的任务,您可以使用 CompletionService 并以类似的方式从软件更新状态。
关于java - 从 SwingWorker 执行 SwingWorker - 等待第一个停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996462/