簡體   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