如何关闭一个swingworker线程?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值