从SwingWorker执行SwingWorker - 等待直到第一次停止

问题描述:

我试图从另一个SwingWorker(MainWorker)执行SwingWorker(SubWorker),然后我想让MainWorker等待SubWorker完成。同时,MainWorker应根据SubWorker的属性更改自行更新。从SwingWorker执行SwingWorker - 等待直到第一次停止

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的活动平行运行?

如果你只有一个子工作者,我不确定这有什么意义 - 为什么你不能在SW身上执行这个任务?

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

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

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

+0

谢谢,使用Executor解决了这个问题。 – RemiX 2010-06-08 12:32:49