我正在编写一个带有一组SwingWorkers的GUI,这些SwingWorkers在USB连接设备上执行不同类型的测试。在我的应用程序的首页(选项卡式布局)上,用户可以选择运行所有测试。测试以信号量顺序运行(因此不按预定顺序),但是当用户希望通过启动所有其他“子”-SwingWorkers的“主”SwingWorker运行所有测试时,done()
“主要”SwingWorker的任务早在任何“sub”-SwingWorkers实际完成测试之前就已到达。
我不知道他们什么时候完成的原因是因为我想将结果读取到文本文件中,并且在测试类型的某些变量中“保存”测试结果。
SwingWorker main = new SwingWorker<Void, Void>();
main.execute();
if(!this.isCancelled()){
for(SwingWorker worker : workers){ //Workers is an array of the sub-type SwingWorkers
worker.execute();
}
}
//get result variables <-- Here I get a nullpointer exception because sub-tests have not yet finished.
//write report using variables
if(!this.isCancelled(){
//acquire semaphore
//perform test <-- Takes some time to finish.
}
//save results to variable
//release sempaphore
我尝试创建一个全局布尔变量,然后在报告编写类中使用while(true)
和thread.sleep(1000)
等待,但这似乎挂起了程序,这是有道理的。
重要部分是所有子摇摆工作者已经通过选项卡式布局中的各自标签作为独立解决方案工作。
有没有人知道找出所有“sub”-SwingWorkers完成的好方法?