2014-10-31 73 views
0

使用幫助用戶提供的代碼Stefan我編輯了自己的代碼來模擬他的,但是我無法讓我的計時器開始。我試圖將實例移出private void,並導致其他錯誤,如嘗試重新定義計時器變量。Java Swing Timer開始問題

private Timer timer;   

private void StartStopTimerActionPerformed(java.awt.event.ActionEvent evt) {            

    timer = new Timer(5000,new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent evt) { 

     } 
    }); 

    StartStopTimer.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (!timer.isRunning()) { 
       timer.start(); AddOneActionPerformed(evt); 
      } else { 
       timer.stop(); 
      } 
     } 
    }); 
}     

此代碼對定時器沒有影響。它不會開始計數

+0

正如在我的例子提到的,計時器執行5秒一次之後actionPerformed方法。如果您希望計時器每秒計數一次,則需要將間隔(5000)設置爲1000並調用timer.setRepeats(true)。更新了我的答案。 – Stefan 2014-11-03 11:19:46

回答

5

您正在每個按鈕單擊(第3行)上創建新的計時器。在你的類中使定時器爲字段,初始化一次,只調用ActionListeners中的start和stop。

要暫停定時器調用「stop()」,要重置它,請調用「restart()」。

更新

import javax.swing.Timer; 

class TimerExample { 

    // only one timer per class (field) 
    private Timer timer; 

    TimerExample() { 

    // initialize: counts 5 seconds, calls actionPerformed() and stops 
    timer = new Timer(1000, new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent evt) { 
     // handle timer invoked ... 
     System.out.println("Now!"); 
     }  
    }); 
    timer.setRepeats(true); 

    JButton startStopBtn = new JButton("Start/Stop"); 
    startStopBtn.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (!timer.isRunning()) { 
       timer.start(); 
      } else { 
       timer.stop(); 
      } 
     } 
    }); 
    } 
... 
} 
+0

對不起,我討厭打擾你,但你介意舉個例子嗎? – 2014-10-31 12:42:31

+0

我爲你的代碼製作了一個單獨的java文件,但是我一直收到包中的錯誤create class timer。我不是100%確定這意味着什麼。我還得到另一個錯誤,說不能將Int轉換爲String,其中毫秒值爲 – 2014-10-31 15:46:40

+0

請更新您的問題以解決問題。 – Stefan 2014-10-31 20:09:29