2015-07-22 51 views
2

我正在開發一款棋盤遊戲,並且在遊戲的一部分中,我需要點擊此按鈕時纔會改變一個標籤,反覆計數1到5,延遲1秒間隔和後將標籤更改爲「完成」,但問題它將標籤更改爲「完成」,然後計數。Java Util Timer中的按鈕

btn.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent arg0) { 
      timer = new Timer(); 
      timer.scheduleAtFixedRate(new TimerTask() { 
       // @Override 
       public void run() { 
        count++; 
        if (count >= 6) { 
         timer.cancel(); 
         timer.purge(); 
         return; 
        } 
        lbl.setText(String.valueOf(count)); 
       } 
      }, 1000,1000); 
      lbl.setText("done"); 
     }}); 

回答

0

當你點擊按鈕時,actionPerformed()方法依次執行:

  1. 創建一個新的計時器
  2. 註冊在未來定期執行每一秒,任務
  3. 將按鈕標籤設置爲「完成」

T後來,計時器完成工作,並開始增加變量計數,每次更新按鈕標籤。像這樣的閱讀應該會幫助你理解發生了什麼:定時器在一個單獨的線程中執行。 timer.scheduleAtFixedRate()是一個非阻塞函數,它註冊一個TimerTask以稍後執行,並立即返回。

爲了解決您的問題,這樣的事情可能是一個解決辦法:

btn.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent arg0) { 
      timer = new Timer(); 
      timer.scheduleAtFixedRate(new TimerTask() { 
       // @Override 
       public void run() { 
        count++; 
        if (count >= 6) { 
         timer.cancel(); 
         timer.purge(); 

         // We set the label to done only when the counter 
         // reaches the value 6, after button displayed 5 
         lbl.setText("done"); 

         return; 
        } 
        lbl.setText(String.valueOf(count)); 
       } 
      }, 1000,1000); 
     }}); 
+0

哇謝謝你..沒想到的 – boot