2013-11-09 53 views
1

我被鼓勵使用Java Swing計時器,而不是使用Thread.sleep(2000);的粗略方法 - 但是這給了我很多問題。我無法正確使用Swing Timer(能夠多次調用它)嗎?

具體而言,我不知道如何能夠調用將執行計時器的函數。說我的計時器是20分鐘,我希望能這樣說:

for(int i = 0; i<10; i++){ 
    call20MinuteTimer(); 
} 

然後該定時器將運行10次(即200分鐘它的循環)。通過Thread.sleep(),上面的w很容易。我可以說。

這裏是我的代碼看起來現在:

ActionListener a9 = new ActionListener(){ 
     public void actionPerformed(ActionEvent evt){ 

     DateFormat dateFormat = new SimpleDateFormat("HH:mm"); 
     String currentTime = (String) dateFormat.format(new Date()); 

     combo2.append("You completed " + i + "" 
     + " pomodoros! At " + currentTime + " \n"); 
     Toolkit.getDefaultToolkit().beep(); 
     } 
     }; 



    Timer newTimer = new Timer(500, a9); 
    newTimer.start(); 
    newTimer.setRepeats(false); 

如果我把所有代碼上面的線把它變成一個功能(主要外),它只會調用一次。

也許我不清楚發生了什麼?我只是迷失在這。感謝

回答

3

爲了有一個計時器循環「X」的時候,給它一個計數字段:

ActionListener a9 = new ActionListener(){ 
    private int count = 0; 

    public void actionPerformed(ActionEvent evt){ 
    if (count < MAX_COUNT) { // MAX_COUNT is an int constant, here, 10 

     // ... do something 

    } else { 
     // we're done -- stop the Timer 
     ((Timer)evt.getSource()).stop(); 
    } 
    count++; 
    } 
}; 

最關鍵的是,雖然它可能看起來你正在做環式行動,但要做到這一點,你不要使用循環。您必須重複定時調用此代碼。

另外,這個:Timer newTimer = new Timer(500, a9);使其每500毫秒重複一次。

而這個:newTimer.setRepeats(false);使它不再重複!如果你想重複計時器,你會想擺脫這條線。

+0

非常感謝! – Coffee

+1

@Adel:不客氣! –