如何取消SwingWorker的执行?目前我有两个SwingWorker线程在后台工作。如果发生异常,该方法将停止工作,但该线程仍然运行。如何停止执行并杀死doInBackground()发生异常的线程?this.cancel(true)不要破坏/关闭线程。我怎样才能做到这一点?@Overrideprotected Boolean doInBackground() throws Exception {
try {
while (true) {
//some code here
return true;
}
} catch (Exception e) {
this.cancel(true); //<-- this not cancel the thread
return false;
}
}我在Netbeans的调试中看到了这些线程。'AWT-EventQueue-0' em execução'AWT-Windows' em execução'SwingWorker-pool-1-thread-1' em execução'SwingWorker-pool-1-thread-2' em execução//*em execução = in execution
3 回答
ITMISS
TA贡献1871条经验 获得超8个赞
默认情况下,SwingWorker
重用工作线程,因此即使doInBackground()
已经返回,仍然可以看到执行方法的线程是完全正常的。
您可以通过查看NetBeans所报告的线程名称来识别此事实:SwingWorker-pool-1-thread-1
该池由哪个池管理SwingWorker
。
如果您想要更多控制,您也可以将SwingWorker
实例传递给Executor
。
只需检查SwingWorker和Executor javadoc以获取更多信息。
此外,SwingWorker.cancel()
不应该doInBackground()
从另一个线程(通常是EDT)调用,例如当用户单击进度对话框中的“ 取消”按钮时。
添加回答
举报
0/150
提交
取消