如果我通过调用其execute()启动了SwingWorker线程。有什么方法可以在执行时打断它吗?
答案 0 :(得分:6)
如果您控制SwingWorker的代码,则可以在isCancelled()
中的适当位置轮询doInBackground()
,然后在返回true
时停止工作。然后当你感觉到时cancel工人:
class YourWorker extends SwingWorker<Foo, Bar> {
// ...
protected Foo doInBackground() throws Exception {
while (someCondition) {
publish(doSomeIntermediateWork());
if (isCancelled())
return null; // we're cancelled, abort work
}
return calculateFinalResult();
}
}
// To abort the task:
YourWorker worker = new YourWorker(args);
worker.execute();
doSomeOtherStuff();
if (weWantToCancel)
worker.cancel(false); // or true, doesn't matter to us here
现在,正如您所说,cancel(boolean)
可能会失败,但为什么? Javadocs告知我们:
返回:
false
如果任务无法取消,通常是因为它已经正常完成;否则true
。