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

我正在尝试创建一个程序来执行一个简单的任务,并每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(); } 

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

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

谢谢。

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

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