java swingworker_java – 为什么我的SwingWorker线程在执行完成之前会继续运行?

我正在为控制台应用程序实现GUI,我需要在指定的时间间隔内执行一些操作(例如,解析

XML文件).我决定使用javax.swing.Timer与SwingWorker一起确保这些操作不会使我的应用程序无响应.

我以这种方式实现了定时器:

public class DataUpdateTimer extends Timer {

private String dataFlowControllerXML = null;

private DataUpdateWorker dataUpdateWorker = null;

public class DataUpdateWorker extends SwingWorker {

private String dataFlowControllerXML = null;

DataUpdateWorker(String dataFlowControllerXML) {

super();

this.dataFlowControllerXML = dataFlowControllerXML;

}

@Override

protected Boolean doInBackground() throws Exception {

Thread.sleep(300);

return Boolean.TRUE;

}

}

public class DataUpdateIntervalListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

DataUpdateTimer timer = (DataUpdateTimer)e.getSource();

DataUpdateWorker dataUpdateWorker = timer.getDataUpdateWorker();

if (dataUpdateWorker != null)

if (dataUpdateWorker.isDone()) {

Boolean updateResult = Boolean.FALSE;

try {

updateResult = (Boolean)dataUpdateWorker.get();

} catch (InterruptedException ex) {

} catch (ExecutionException ex) {

}

dataUpdateWorker = null;

}

// Creating new worker thread here

if (dataUpdateWorker == null) {

timer.dataUpdateWorker = new DataUpdateWorker(timer.dataFlowControllerXML);

// Starting a new worker thread for parsing Data Flow Controller's XML

timer.dataUpdateWorker.execute();

return;

}

}

}

DataUpdateTimer(Integer dataUpdateInterval,String dataFlowControllerXML) {

super(dataUpdateInterval.intValue(),null);

this.dataFlowControllerXML = dataFlowControllerXML;

addActionListener(new DataUpdateIntervalListener());

}

@Override

public void stop() {

super.stop();

if (dataUpdateWorker != null) {

if (!dataUpdateWorker.isDone() || !dataUpdateWorker.isCancelled())

dataUpdateWorker.cancel(true);

}

}

}

…并使用如下:

new DataUpdateTimer(1000,dataFlowControllerXML).start();

一切都符合我的意愿. Timer创建一个新的SwingWorker实例并执行它.在完成工作之后,创建并执行新的工作.

我感到困惑的是,在工作线程完成后,我仍然可以看到它在Netbeans的调试窗口中运行(例如,作为SwingWorker-pool-3-thread-1)或在Windows任务管理器中线程完成后运行的线程不减少). SwingWorker线程的数量限制为10,但让他们运行尴尬我.

在简单的线程使用情况下:

Thread th = new Thread(new Runnable() {

public void run() {

int a = 0;

}

});

th.start();

执行后线程自动消失.

这个SwingWorker行为是否正常?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值