我一直在读这个,从这些帖子中,我知道我可能是一个错误
SwingWorker, done() is executed before process() calls are finished
The proper way to handle exceptions thrown by the SwingWorker.doInBackground
但是在我的情况下,没有任何东西可以调用done方法。这就是我的工作人员的工作方式。
public static class collectingWorker extends SwingWorker<Void, Void> {
collectingWorker(String name) {
//initialize
threadName = name;
}
@Override
public Void doInBackground() {
loop = true;
while(loop){
//Code goes here
}
return null;
}
@Override
protected void done() {
System.out.println("loop: " + loop);
System.out.println("Collecting worker DONE");
try {
get();
} catch (CancellationException x) {
System.out.println("Cancelation");
// ...
} catch (InterruptedException x) {
System.out.println("Interruption");
// ...
} catch (ExecutionException x) {
System.out.println("Execution");
System.out.println(x.getMessage());
System.out.println(x.getCause());
// ...
}
}
}
在另一个线程上,我有一个计数器,在将循环设置为false之前等待x分钟。我看到的是,collectiveWorker done方法在它应该等待的x分钟之前执行,更糟糕的是,它完全是随机的,有时它可以工作,有时它在3分钟后失败,有时在90分钟后失败。< / p>
这就是我从done方法中得到的东西,正如你所看到的,布尔&#34;循环&#34;永远不会设置为假
loop: true
Collecting worker DONE
Execution
java.util.NoSuchElementException
java.util.NoSuchElementException
任何想法或解决方法?
答案 0 :(得分:0)
嵌套在while(循环)中的逻辑抛出NoSuchElementException,导致整个doInBackground()方法过早退出。