我有两个来自java.util.Timer类的定时器。定时器命中一个条件并启动另一个定时器,并在它启动另一个定时器之前停止原始定时器。这回退和进一步如下:两个定时器互相调用
private void StartGame()
{
RankTimer.cancel();
InGame = true;
timeLeft = GamePeriod;
InGameTimer.purge();
InGameTimer.schedule(new TimerTask() {
@Override
public void run()
{
timeLeft = timeLeft-timerUpdate;
if(timeLeft<=0)
{
StartRank();
}
}
}, 0, timerUpdate);
}
protected void StartRank()
{
InGameTimer.cancel();
GameDataChange();
InGame = false;
timeLeft = RankPeriod;
RankTimer.purge();
RankTimer.schedule(new TimerTask() {
@Override
public void run()
{
timeLeft = timeLeft-timerUpdate;
if(timeLeft<=0)
{
StartGame();
}
}
}, 0, timerUpdate);
}
定时器是RankTimer和InGameTimer。当代码在某个点运行时,出现以下错误:
线程“Timer-0”中的异常java.lang.IllegalStateException:计时器已被取消。 (Unknown Source) at demo.ServerGameThread.StartRank(ServerGameThread.java:76) at demo.ServerGameThread $ 1.run(ServerGameThread的.java:64) 在java.util.TimerThread.mainLoop(来源不明) 在java.util.TimerThread.run(来源不明)
我做了一个净化过之前设置调度。这个想法是,这些计时器将无限地呼唤另一个人在开始自己的任务时停止对方。任何想法为什么它失败?还是有更好的方法来实现我想要做的事情?