Java Swing Timer和无限循环存在问题



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

最新更新