【问题标题】:java.util.Timerjava.util.Timer
【发布时间】:2012-10-26 15:14:19
【问题描述】:
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()方法,stop是停止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();

}

【问题讨论】:

  • 根据 hmjd 的响应,在调用 schedule 之前创建一个新的 Timer

标签: java timer


【解决方案1】:

来自Timer.cancel()的javadoc:

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

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

【讨论】:

  • 什么是为循环创建新实例的方法
【解决方案2】:

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

【讨论】:

  • 我试过这个我得到了错误,我在未来的计时器,调度程序和 TimeUnit 无法解决它说
  • 所有这些类都是 Java 语言的一部分。您忘记添加导入了吗?
  • 我剪掉了 Timer,runner 是上面的样子,scheduler 是 ScheduledThreadPoolExecutor,我没有未来,我知道如何停止调度程序,我是新手
  • 发布你现在拥有的东西。您没有停止调度程序,而是取消了 Future。
  • ScheduledThreadPoolExecutor scheduler; scheduler = new ScheduledThreadPoolExecutor(1); Runnable runner = new Runnable(){ public void run() { rollthedice(); } }; if(e.getSource()==continuous) { scheduler.scheduleAtFixedRate(runner, 0, 500, TimeUnit.MILLISECONDS); } if(e.getSource()==stop) { scheduler.shutdown(); } 我希望停止按钮停止调度程序,然后当我单击连续再次启动它时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多