2015-12-03 32 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();