繁体   English   中英

Java Swing计时器和无限循环出现问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM