Java:Swing计时器等待

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();

有时工作器程序需要超过10秒钟,但有时只需要3-4秒钟,那么如何设置计时器以等待工作器的完整执行?有什么建议吗?

1
Swing Timer是否在SwingWorker类中?如果是,请将其移出SwingWorker类;否则,请发布一个简短且可运行的SSCCE(http://sscce.org/http://example.com)。 - mKorbel
抱歉,我没有正确地重写它。当然,计时器是超出 SwingWorker 类的范围。 - Paweł Wójcik
请提供一个 SSCCE 来演示您的问题,否则您的问题将难以回答... - mKorbel
工作人员更新RSS订阅源,因此取决于当前网站的可用性、连接速度等因素。因此在这里不需要发布完整的代码。重要的是执行通常不会超过10秒,但我想处理可能需要更长时间的情况。 - Paweł Wójcik
如果不接受,那么这里的所有答案都只能是瞎猜,何必费力呢? - mKorbel
1个回答

4
请参阅SwingWorker类的javadoc:
在工作线程上调用doInBackground方法之前,SwingWorker会通知任何PropertyChangeListeners有关状态属性更改为StateValue.STARTED。完成doInBackground方法后,将执行done方法。然后,SwingWorker会通知任何PropertyChangeListeners有关状态属性更改为StateValue.DONE。
因此,当SwingWorker完成时会触发事件。附加一个监听器并在正确的事件上重新激活您的Timer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接