Java在计时器运行之前终止

Java在计时器运行之前终止,java,multithreading,swing,timer,Java,Multithreading,Swing,Timer,我有以下代码 new Timer(300, this).start(); 还有这个 public void actionPerformed(ActionEvent e) { //do something } 在实现ActionListener的同一类中 问题是程序在actionPerformed中的代码运行之前终止。至少我认为这就是正在发生的事情 当java无事可做时,我如何告诉它继续运行 谢谢 编辑:它是一个javax.swing.Timer每当所有非守护进程线程完成时,Java程序

我有以下代码

new Timer(300, this).start();
还有这个

public void actionPerformed(ActionEvent e) {
   //do something
}
在实现
ActionListener
的同一类中

问题是程序在
actionPerformed
中的代码运行之前终止。至少我认为这就是正在发生的事情

当java无事可做时,我如何告诉它继续运行

谢谢


编辑:它是一个javax.swing.Timer

每当所有非守护进程线程完成时,Java程序就会终止。因此,保持主线程或至少一个非守护进程线程运行。

计时器使用守护进程
线程
s-它们不会阻止程序退出

您使用的是
javax.swing.Timer
,但看起来不像是在
swing
环境中运行

您需要使用
java.util.Timer
,并确保使用
new Timer(false)
创建它。这将使用保持应用程序打开的非守护进程
线程构建它


这意味着您需要在
计时器上调用
cancel()
,应用程序才能退出。

是什么导致您的程序终止?这是一个Swing或AWT程序,还是其他什么?除非您显式退出(或关闭主窗口并启用关闭时退出),否则程序很可能由于某个未捕获的异常而终止。没有gui,所有内容都在一个线程中运行(除了
ActionPerformed
我猜)。如果您没有gui,为什么要使用Swing,什么是触发调用
actionPerformed
?Swing应用程序不会在无事可做时终止。“他们坐在那里等待事件发生。”泰德霍普我想这就回答了我的问题。谢谢!所以我只需要创建一个线程非守护进程,然后什么都不做。我该怎么做?@TomJenkinson你的程序中有GUI吗?没有。我在任何地方都没有使用GUI。@TomJenkinson那就不要使用
javax.swing.Timer
。相反,使用
java.util.Timer
或者更好的
java.util.concurrent.ScheduledExecutorService
。我将使用
java.util.Timer
。谢谢你的帮助。