猿问

如何取消SwingWorker的执行?

如何取消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


阿波罗的战车
浏览 918回答 3
3回答

ITMISS

默认情况下,SwingWorker重用工作线程,因此即使doInBackground()已经返回,仍然可以看到执行方法的线程是完全正常的。您可以通过查看NetBeans所报告的线程名称来识别此事实:SwingWorker-pool-1-thread-1该池由哪个池管理SwingWorker。如果您想要更多控制,您也可以将SwingWorker实例传递给Executor。只需检查SwingWorker和Executor&nbsp;javadoc以获取更多信息。此外,SwingWorker.cancel()不应该doInBackground()从另一个线程(通常是EDT)调用,例如当用户单击进度对话框中的“&nbsp;取消”按钮时。

冉冉说

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

相关分类

Java
我要回答