我在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(),我很肯定计时器已停止,但是在运行程序后,我被迫在下次重置虚拟机,否则它将不会运行。任何帮助表示赞赏!
答案 0 :(得分:2)
您的UI()
方法可能应该在后台线程上调用,因为它可能会占用Swing事件线程(我们必须猜测,因为您不会显示它)。因此,创建一个SwingWorker或后台线程并在那里进行此调用。有关详情,请阅读Concurrency in 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();
}