向swingworker添加超时功能

时间:2012-02-13 15:19:24

标签: java multithreading swing timeout swingworker

我将不得不很快为我的应用程序实现一些功能,根据用户指定的长度超出一个摇摆工作者。

我想知道我是否可以扩展swingworker类并在里面添加我自己的超时倒计时,例如我可以覆盖dowork方法,调用startCountdown()然后调用super.dowork然后继续检查超时是否超过?

我想知道这种方法是否有更好的解决方案?感谢

2 个答案:

答案 0 :(得分:5)

SwingWorker的javadoc建议:

  

由于SwingWorker实现了Runnable,因此可以将SwingWorker提交给Executor执行。

这将是您所需的超时功能的简单解决方案。

将您的SwingWorker提交至ExecutorService#submit。在生成的Future<?>上,您可以实施,例如

的时间为10秒
Future<?> f = service.submit(mySwingWorker);
try {
    f.get(10, TimeUnit.SECONDS);
} catch (ExecutionException ex) {
    /* SwingWorker threw an Exception */
} catch (TimeoutException ex) {
    /* SwingWorker timed out */
} catch (InterruptedException ex) {
    /* Thread got interrupted */
} catch (CancellationException ex) {
    /* would only be thrown in case you
       call #cancel on your future */
}

答案 1 :(得分:2)

使用Swing Timer

如果它熄灭,则超过时间。在此之前取消它以停止它。