主方法完成后的Swing计时器持久性

时间:2011-10-03 22:08:51

标签: java swing timer

我正在尝试创建一个程序来执行一个简单的任务,并每x秒产生一个输出。我还希望程序运行,直到我决定手动关闭程序。

我一直在尝试使用Swing计时器来实现它,因为我认为这是最好的方法。问题是我不确定一旦主方法执行完毕后如何保持程序运行。例如,我有:

 static ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          try {
            //do stuff
        } catch (Exception e) {
            e.printStackTrace();
        }
          }
  };
public static void main(String[] args) throws Exception{
      Timer timer = new Timer(3000, taskPerformer);
      timer.start();
  }

立即完成执行。我可以通过将当前执行线程置于休眠Thread.currentThread().sleep(..)来避免这个问题,但这感觉就像一个拙劣的工作,并且最终将持续有限。我也可以做(真的),但我相信这是不好的做法。

我的问题是如何获得所需的持久性行为,以及是否有比使用Swing计时器更好的方法。

感谢。

2 个答案:

答案 0 :(得分:6)

只要EDT处于活动状态,Swing Timer就会保持活动状态,通常这是通过让Swing GUI存在并且可见(这会创建一个非守护进程线程,直到GUI退出)。如果您不需要Swing GUI,则不要使用Swing Timer。也许改为使用java.util.Timer,并且不要退出main方法直到你给出这个词(但是你打算这样做)。

答案 1 :(得分:3)

请改用java.util.Timer。关联的线程不会作为守护进程运行。