如何关闭一个swingworker线程?

来源:互联网 发布:mac系统重装教程 u盘 编辑:程序博客网 时间:2024/05/16 10:56

如题,一般程序中利用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 方法

原创粉丝点击