3

我有这样的代码:

final SwingWorker worker = new SwingWorker() { 
      @Override
      protected Object doInBackground() throws Exception {...};
}
Timer timer=new Timer(10000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            worker.execute(); 
        }
    });
    timer.start();

有时worker进程需要超过10秒,但有时3-4秒,那么如何设置定时器等待worker完全执行?有什么建议么?

4

1 回答 1

4

请参阅SwingWorker该类的 javadoc:

在工作线程上调用 doInBackground 方法之前,SwingWorker 将状态属性更改为 StateValue.STARTED 通知任何 PropertyChangeListener。在 doInBackground 方法完成后,将执行 done 方法。然后 SwingWorker 将状态属性更改为 StateValue.DONE 通知任何 PropertyChangeListener。

因此,完成后会触发事件SwingWorkerTimer附加一个侦听器并在正确的事件上重新激活您的。

于 2012-09-27T11:20:05.543 回答