4
....

public class mainClass {
    public mainClass(){
        Timer time = new Timer();
        mainClass.calculate calculate = new mainClass.calculate();
        time.schedule(calculate, 1 * 1000);
    }

    public static void main(String[] args){
        new mainClass();
    }

    class calculate extends TimerTask{
        @Override
        public void run() {
            System.out.println("working..");

        }
    }
}

コンソールに "working.." メッセージが 1 回しか表示されませんでした。コードの問題は何ですか? 私の別の問題は、毎秒自分のメソッドを実行したいのですが、どうすればよいですか?

私の悪い英語でごめんなさい..

4

5 に答える 5

11

Timer.schedule(TimerTask task, long delay)2 番目の引数のミリ秒数の後に、TimerTask を 1 回だけ実行します。

TimerTask を繰り返し実行するには、schedule()などの他のオーバーロードのいずれかを使用する必要がありますTimer.schedule(TimerTask task, long delay, long period)。次に例を示します。

time.schedule(calculate, 1000, 1000);

これは、タスクを今から 1000 ミリ秒後に実行し、1000 ミリ秒ごとに繰り返すようにスケジュールします。

于 2012-09-09T20:50:42.700 に答える
2

ドキュメントによると、それは1回であると想定されています:

public void schedule(TimerTask task, long delay) 指定された遅延の後に指定されたタスクを実行するようにスケジュールします。パラメータ: task - スケジュールされるタスク。delay - タスクが実行されるまでのミリ秒単位の遅延。例外: IllegalArgumentException - delay が負の場合、または delay + System.currentTimeMillis() が負の場合。IllegalStateException - タスクがすでにスケジュールされているかキャンセルされているか、タイマーがキャンセルされた場合。

あなたはおそらく電話したい

public void スケジュール (TimerTask タスク、長い遅延、長い期間)

于 2012-09-09T20:52:01.963 に答える
1

タイマーが起動するまでメインスレッドで待機する必要があります。すべての非デーモン スレッドが完了すると、JVM は終了します。メイン メソッドを実行するスレッドは、実際には唯一の非デーモン スレッドであるため、作業が完了するまで待機させる必要があります。

main メソッドを次のように変更します。

 public static void main(String[] args){
     new mainClass();
     Thread.sleep(2 * 1000); // wait longer than what the timer 
                             // should wait so you can see it firing.
 }
于 2012-09-09T20:48:40.747 に答える
1

以下を使用する必要があります。

zaman.schedule(calculate, 0, 1000);

タイマーを複数回実行するようにスケジュールします。

于 2012-09-09T20:51:11.730 に答える
0

使用しているバージョンはTimer.schedule()、タスクを遅延後に 1 回だけ実行します。タスクを繰り返すには、`Timer.schedule(TimerTask, long, long)を使用する必要があります。

于 2012-09-09T20:53:44.377 に答える