摆动计时器和耗时的任务

时间:2013-11-29 11:43:25

标签: java multithreading swing timer swingworker

我正在开发一个Swing应用程序。我需要在后台运行一些任务,因此需要在TrayIcon上显示消息。经过一些固定的延迟后,这些任务必须重复执行,因此我研究并发现Swing Timers是一个不错的选择。然而,与此同时,这些任务可能很耗时,而且我不希望GUI冻结或类似的东西(所以,为了满足这最后的要求,我应该使用工作线程)。问题是工作线程不允许我以一些固定的延迟和“永远”执行这些任务。

我不知道如何解决这个问题,所以任何帮助都会受到赞赏:)

3 个答案:

答案 0 :(得分:5)

actionPerformed的{​​{1}}为实际工作创建SwingWorker

答案 1 :(得分:1)

您无需创建任何额外的多线程支持。计时器创建一个新线程,用于在actionPerformed中运行命令。或者您也可以使用'java.util.Timer'作为计时器。它比摇摆更容易,每次运行时也会创建自动线程。

   import java.util.*;

之后你可以添加

   Timer t=new Timer();
   t.scheduleAtFixedRate(new TimerTask(){
       void run(){
          // your codes to perform
       }, /*time in miliseconds*/);

这可能会解决您的问题

答案 2 :(得分:0)

您可以创建任务队列。

  1. 创建一个计时器,将 shedule 您的任务交给某个执行者。 (比如ThreadPoolExecutor)。在任何延迟,定期,等等。
  2. 注册一个监听器以完成任务。
  3. 执行人员将在背景上处理任务。
  4. 当任务准备就绪时,通过回调通知主应用程序。
  5. 不要使用简单的线程。 Java有很多可靠的机制,比如Future和Executors。