2010-08-27 69 views
0

我目前正在尝试获得一个小型的brick-breaker游戏,我有效地使用某种形式的加电或奖金。我现在大部分都已经实施了。但是我有一个问题。我使用java.util.Timer来确定加电持续的时间。最有可能的是,这种加电将被多次(通过随机数发生器)选择。但是,Java Timer只能使用一次,在调用cancel()方法后,就完成了。现在,我设置了游戏来标记所使用的电源,并且不再使用它。有没有办法解决这个问题?下面是在选择了LongPaddle开机时调用的方法:Java定时器Reusage

public void longPaddleTime(int seconds) { //longPaddle Timer Method - gets called when the longPaddle bonus is enabled; shuts off longPaddle after a set amount of time 
    timerLP.schedule(new TaskLP(), seconds*1000); 

} 
class TaskLP extends TimerTask { //The task to be run after the timer in longPaddleTime runs out 
    public void run() { 
     longPaddle=false; //Disable LongPaddle 
     bonusActive=false; 
     LPused=true; //Mark as used 
     timerLP.cancel(); //Terminate the timer thread 
     timerLP.purge(); 
    } 
} 

回答

1

你不需要取消()的计时器 - Timer.schedule(TimerTask的,较长时间的延迟)将只运行指定的任务一次。你只需要取消()一个定时器,如果你想终止它正在做的一切。

对于您的情况(调度任务一次),Timer类中不需要清理。如果你有一个重复的任务,并且你只想停止那一项任务,你可以调用TimerTask.cancel()来防止它重新分配,同时仍然允许Timer重用于其他目的。

+0

哦,我想我只是读了错误的API。谢谢! – 2010-08-28 03:39:55

0

您不必取消TaskLP中的计时器。

创建一个Timer对象,该对象位于Application范围内,并根据需要安排新的TimerTasks。

顺便说一句,虽然没有正式弃用,Timer功能已被ScheduledExecutorService取代。我建议,如果你从头开始使用这个框架。

Executors实用工具类有一些简化ScheduledExecutorService构造的方法。

+0

好的,谢谢我会考虑这一点。 – 2010-08-28 03:40:38