我正在尝试创建一个程序来执行一个简单的任务,并每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计时器更好的方法。
感谢。
答案 0 :(得分:6)
只要EDT处于活动状态,Swing Timer就会保持活动状态,通常这是通过让Swing GUI存在并且可见(这会创建一个非守护进程线程,直到GUI退出)。如果您不需要Swing GUI,则不要使用Swing Timer。也许改为使用java.util.Timer,并且不要退出main方法直到你给出这个词(但是你打算这样做)。
答案 1 :(得分:3)
请改用java.util.Timer。关联的线程不会作为守护进程运行。