1

runメソッド内でcancel()を呼び出しても、CheckStatus(TimerTask)が停止しません。this.cancel()も機能しません。私は何が間違っているのですか?

import java.util.TimerTask;
class CheckStatus extends TimerTask {
   int s = 3;
   public void run() {
      if (s > 0)
      {
         System.out.println("checking status");
         s--;
      }
      else
      {
         System.out.println("cancel");
         cancel();
      }
   }
}

これが私の運転手です

import java.util.*;
class Game {
   static Timer timer;
   static CheckStatus status;

   public static void main(String[] args) throws InterruptedException {        
      CheckStatus status = new CheckStatus();
      timer = new Timer();
      timer.scheduleAtFixedRate(status, 0, 3000);
   }  
}
4

2 に答える 2

2

それは私のために働きます-あなたが投稿したコードを正確に使用して、私は見ました:

checking status
checking status
checking status
cancel

...そして他には何もありません。TimerTaskキャンセルされたことを示しています-二度と実行されることはありません。

Timerそれ以上の作業がなくなったときに、それ自体がシャットダウンすることを期待していましたか?それは自動的には行われません。あなたのより大きな目標が何であるかは明らかではありませんが、これを回避するための1つのオプションは、TimerTaskキャンセルも行うTimerことです-それは機能しますが、デザインの点ではそれほど良くはTimerTaskなく、タイマー内でうまく実行できないことを意味します他のタスクが含まれています。

于 2011-12-16T07:21:01.370 に答える
2

タイマータスクのcancelメソッドを呼び出していますが、期待される動作を取得するには、タイマー自体のcancelメソッドを呼び出す必要があります。

于 2011-12-16T07:33:54.903 に答える