您的位置:首页 > 其它

如何关闭一个swingworker线程?

2013-04-10 11:11 323 查看
如题,一般程序中利用swingworker启动一个线程都是直接用匿名方法直接

new swingworker<void,void>(){

protected Void doInBackground() throws Exception {

while(true){

内容。。。

}

}

}.execute();

一般都是这样的,而且一次根据需要可能会new出N个线程来,全都是匿名的,那么我现在在窗口dispose()后关闭所有正在运行的线程,该怎么写呢?

对swingworker我表示真心就知道这些,里头还好多方法都不知道怎么用,做什么用

private SwingWorker<Void, Void> worker;

// somewhere in EDT

worker = new StringWorker<Void, Void>() {

... ...

};

worker.execute();

...

// somewhere else in EDT

if( worker != null ) worker.cancel(true);

如果你在一个 SwingWorker 里只用到了 doInBackground 方法

那和一个普通的 Thread 是没有区别的

当你需要更新界面的时候,应该调用 publish 方法,通知 process 方法处理相关的界面更新

API 里写的很清楚

SwingWorker 的生命周期中包含三个线程:

当前 线程:在此线程上调用 execute() 方法。

Worker 线程:在此线程上调用 doInBackground() 方法。所有后台活动都应该在此线程上发生。

事件指派线程:所有与 Swing 有关的活动都在此线程上发生。SwingWorker 调用 process 和 done() 方法。

你要强行结束一个 SwingWorker 可以用 cancel 方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: