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()が1秒間に2回ループを実行し、停止ボタンを押すと、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 に答える