2
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();

}
4

2 回答 2

2

从 javadoc 为Timer.cancel()

终止此计时器,丢弃任何当前计划的任务。不干扰当前正在执行的任务(如果存在)。一旦定时器被终止,它的执行线程就会优雅地终止,并且不能在其上安排更多的任务。

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

于 2012-10-26T15:20:18.523 回答
1

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

于 2012-10-26T15:32:30.837 回答