如何检查摇摆工作者“子”工作者何时完成?

时间:2016-05-03 11:18:49

标签: java multithreading swing semaphore swingworker

我正在编写一个带有一组SwingWorkers的GUI,这些SwingWorkers在USB连接设备上执行不同类型的测试。在我的应用程序的首页(选项卡式布局)上,用户可以选择运行所有测试。测试以信号量顺序运行(因此不按预定顺序),但是当用户希望通过启动所有其他“子”-SwingWorkers的“主”SwingWorker运行所有测试时,done() “主要”SwingWorker的任务早在任何“sub”-SwingWorkers实际完成测试之前就已到达。

我不知道他们什么时候完成的原因是因为我想将结果读取到文本文件中,并且在测试类型的某些变量中“保存”测试结果。

主方法

SwingWorker main = new SwingWorker<Void, Void>();
main.execute();

主要的swingworker do-in-background方法

if(!this.isCancelled()){
    for(SwingWorker worker : workers){ //Workers is an array of the sub-type SwingWorkers
        worker.execute();
    }
}

主要的swingworker完成方法

//get result variables <-- Here I get a nullpointer exception because sub-tests have not yet finished.
//write report using variables

sub swingworker do-in-background方法

if(!this.isCancelled(){
    //acquire semaphore
    //perform test <-- Takes some time to finish.
}

sub swingworker done method

//save results to variable
//release sempaphore

我尝试创建一个全局布尔变量,然后在报告编写类中使用while(true)thread.sleep(1000)等待,但这似乎挂起了程序,这是有道理的。

重要部分是所有子摇摆工作者已经通过选项卡式布局中的各自标签作为独立解决方案工作。

有没有人知道找出所有“sub”-SwingWorkers完成的好方法?

0 个答案:

没有答案