2011-08-01 24 views
1

基本的には、クラスのインスタンス変数であるint値xがあります。最初は0に設定されています。私は別のメソッド "getNum"をインクリメントし、xを返します。このgetNum()メソッドは、外部プログラムによって呼び出されます。しかし、毎日(真夜中に、単純化のために)、xを0にリセットしたいと思います。これはどのように行われますか? Date(int、int、int)は推奨されていませんが、メソッドはCalendarではなくDatesしか使用しません。 TimerTaskイベントは発生しません。私がプログラムを一番下に走らせるたびに、数字が常にリセットされるべきではないにもかかわらず、毎回 "0"が印刷されます。基本的に、何も動作しません。何が間違っているのでしょうか? scheduleAtFixedRate(TimerTask, Date, long)のドキュメント毎のJavaプログラムで一定の時間間隔で何かを起こすには?

import java.util.*; 
class Foo { 
    private static void scheduleTimer() { 
    Timer timer = new Timer(); 
    long c = 86400000; 
    timer.scheduleAtFixedRate(new MyTimerTask(), 
    new Date(2011, 7, 31), c); 
    } 
    public static int getNum() { return x++; } 
    private static int x = 0; 
    public static void resetNum() { x = 0; } 
} 

class MyTimerTask() extends TimerTask { 
    public void run() { 
    Foo.resetNum(); 
    } 

public class Bar { // in a separate file 
public static void main (String[] args) { 
    System.out.println(Foo.getNum()); 
    } 
} 
+0

私は実際にどこかで発生しているscheduleTimerの呼び出しがあると仮定しますか? –

+0

このスニペットから実際に何が起こっているのかを知ることも非常に難しいです。あなたのJavaアプリケーションが終了する場合、私の理解は、その変数の値が保持されないことです。あなたがそれを期待している場合、main()がそれを呼び出して終了したときに、ここであなたの設計に何か問題があります。 –

答えて

1

Foo.scheduleTimer()を実際にタイマーを起動し、タイマーに妥当な遅延と期間(数秒間など)を与えてから、ちょうどFoo.getNum()を繰り返し呼び出す一度。たとえば、

import java.util.Timer; 
import java.util.TimerTask; 

public class Foo { 
    public static void scheduleTimer() { 
     Timer timer = new Timer(); 
     long c = 3000; 
     timer.scheduleAtFixedRate(new MyTimerTask(), c, c); 
    } 

    public static int getNum() { return x++; } 
    private static int x = 0; 
    public static void resetNum() { x = 0; } 
} 

class MyTimerTask extends TimerTask { 
    public void run() { 
     Foo.resetNum(); 
    } 
} 

class Bar { 
    public static void main(String[] args) throws Exception { 
     Foo.scheduleTimer(); 
     while (true) { 
      System.out.println(Foo.getNum()); 
      Thread.sleep(1000); 
     } 
    } 
} 
0

:繰り返し固定金利の実行のための

スケジュール指定されたタスク、 指定した時間に始まります。その後の実行は、指定された期間で隔てられたおよそ一定の間隔である で行われます。

したがって、タスクを呼び出すには約86400000ミリ秒かかります。あなたは実際にそれが動作していないことを確認するために長い間待っていますか?

+0

いいえ、私は3000ミリ秒/ 30秒まで3秒を試みましたが、何も働いていませんでした。ある日、私はそれが動作することを確認した後、最終的にはどんなものになるか864000000です。 – joseph

関連する問題