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
。谢谢你的帮助。