所以我目前正在从Executer运行3个SwingWorkers:
主要问题是如果其中一个SwingWorkers被中断(例如由于某些异常或错误)并且结束其他2也应该结束,因为它们将毫无意义地单独运行。
我将这部分代码添加到每个SwingWorker done()函数中:
synchronized(lock)
{
try{
for (int i = 0; i < threads.size(); i++) {
try{
if (threads.get(i)!=null && threads.get(i)!=this){
threads.get(i).cancel(true);
}
} catch (java.lang.NullPointerException ex) {
}
}
} catch (java.lang.NullPointerException ex) {
}
}
如果线程是摇摆工作者的arraylist,我应该马上结束
此解决方案对我有用,但我想知道是否还有其他更好的解决方案?
答案 0 :(得分:0)
如何创建一个全局布尔变量并将其用作所有SwingWorkers中的标志?
当该标志为false
时,每个SwingWorker将退出该进程..(通常这就是你如何结束线程..)
修改强>: 这就是我的意思..不是很漂亮,但可能适合你的需要..
protected Integer doInBackground() throws Exception {
publish("Start..");
setProgress(1);
if(!flag) return -1;
publish("Done more work..");
setProgress(10);
if(!flag) return -1;
publish("Done more work again..");
setProgress(30);
// Completed
publish("Completed..");
setProgress(100);
return 1;
}