为了账号安全,请及时绑定邮箱和手机立即绑定

如何取消SwingWorker的执行?

如何取消SwingWorker的执行?

阿波罗的战车 2019-08-28 15:32:57
如何取消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

只需检查SwingWorkerExecutor javadoc以获取更多信息。

此外,SwingWorker.cancel()不应该doInBackground()从另一个线程(通常是EDT)调用,例如当用户单击进度对话框中的“ 取消”按钮时。

查看完整回答
反对 回复 2019-08-28
?
冉冉说

TA贡献1877条经验 获得超1个赞

有一种cancel()方法。你的代码必须注意这一点。如果它在异常后继续运行,那么代码似乎忽略了它不应该出现的异常。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 907 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信