java.util.Timer中

时间:2012-10-26 15:14:20

标签: java timer

if(e.getSource()==continuous)
{

    TimerTask task = new TimerTask()
    {
        public void run()
        {
            rollthedice();
        }
    };
    timer.schedule(task, java.util.Calendar.getInstance().getTime(), 500);


}

    if(e.getSource()==stop)
    {

        timer.cancel();

    }

我点击了连续按钮,rollthedice()每秒执行两次循环,我点击停止按钮rollthedice()停止,我一直在找的是一种方法,在我点击停止后再次点击连续按钮开始循环rollthedice()方法再次,停止是停止连续循环的rollthedice()但我希望能够再次点击连续按钮,idk怎么做,我一直在寻找和寻找

更新了想法:

Runnable runner = new Runnable(){
    public void run()
    {
        rollthedice();
    }
}

if(e.getSource()==continuous)
{
  future = scheduler.scheduleAtFixedRate(runner, 0, 500, TimeUnit.MILLISECONDS);
}
if(e.getSource()==stop)
{

    future .cancel();

}

2 个答案:

答案 0 :(得分:2)

来自Timer.cancel()的javadoc:

  

终止此计时器,丢弃当前计划的任何任务。不干扰当前正在执行的任务(如果存在)。一旦计时器终止,它的执行线程就会正常终止,并且不再安排任何任务。

这意味着需要Timer的新实例再次执行rollthedice()方法。

答案 1 :(得分:1)

您可以使用ScheduledThreadPoolExecutor.scheduleAtFixedRate代替。这将允许您提交任务,取消它然后再次提交。