[英]Having Issues With Java Swing Timer and Infinite Loops
我的Java代码片段出现问题,似乎正在创建一个无限循环。
public void progress(){
x = 3;
timer = new Timer(800, new ActionListener() {
public void actionPerformed(ActionEvent evt){
System.out.println(x);
x--;
if(x < 1){
UI();
timer.stop();
}
}
});
timer.start();
}
UI方法要求通过SavitchIn进行输入,但似乎没有运行该行。 在我要求在UI方法中输入之前,我先进行打印,并且打印工作正常。 当我从代码中删除此计时器并保持UI方法不变时,它可以正常工作。 打印,然后接受输入。 我也在UI方法中添加了timer.stop(),我肯定计时器已停止,但是运行该程序后,我被迫下次下次重置虚拟机,否则它将无法运行。 任何帮助表示赞赏!
您的UI()
方法可能应该在后台线程上调用,因为它可能会占用Swing事件线程(我们不得不猜测,因为您没有显示它)。 因此,创建一个SwingWorker或后台线程,然后在此进行调用。 有关更多信息,请阅读Swing中的并发 。
例如,
public void progress() {
x = 3;
timer = new Timer(800, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println(x);
x--;
if (x < 1) {
new Thread(new Runnable() {
public void run() {
UI();
}
}).start();
timer.stop();
}
}
});
timer.start();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.