2015-12-03 43 views
0

所以,基本上,我有一個有擺動計時器的搖擺遊戲。這是計算機計算完成之後的等待,直到它轉變爲止,因爲人類看起來不那麼快。當該計時器執行時,下一個回合開始,計算機AI輪到它。 問題是,當兩個玩家都是計算機時,理論上這將在無限期內將定時器彼此堆疊在一起,因爲在定時器內部,同樣的定時器將(間接)再次被調用,並且再一次。這是否會產生數據泄漏?如果是這樣,我還能做些什麼來實現相同的「等待」過程?搖擺 - 彼此堆疊計時器(這是不好的做法?)

因此,在僞代碼,這是發生了什麼事:

public void computerTurn() { 
    ... 
    new Timer(1000, new ActionListener() { 
     .... 
     if (foo) 
      computerTurn() 
    } 
} 
+0

這不會產生定時器或泄漏的無限棧,所以不會成爲一個問題(因爲'computerTurn'不直接調用'ActionListener'內的代碼)。使用內置的重複功能仍然是可取的。 – zapl

回答

1

你可以這樣做:

ActionListener listener = (e) -> { 
    if (!foo) { // if not foo, don't repeat anymore 
    ((Timer)e.getSource()).stop(); 
    } 
} 

Timer timer = new Timer(1000, listener); 
timer.setRepeats(true); 
timer.start();