我在 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();
}