我有兩個來自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(來源不明)
我做了一個淨化過之前設置調度。這個想法是,這些計時器將無限地呼喚另一個人在開始自己的任務時停止對方。任何想法爲什麼它失敗?還是有更好的方法來實現我想要做的事情?