2011-08-01 68 views
1

基本上,我有一個int值,x,它是一個類的實例變量。它最初設置爲0。我有另一種方法,「getNum」,增加並返回x。這個getNum()方法由外部程序調用。然而,每一天(比方說,在午夜,爲了簡單起見),我想將x重置爲0.這將如何完成?我現在遇到的問題:Date(int,int,int)已被棄用,但該方法僅使用日期,而不使用日曆; TimerTask事件從不發生;每次我在底部運行程序時,它都會每次打印「0」,即使該數字不應該經常重置。基本上,沒有任何工作。任何想法出了什麼問題?如何在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

%的文檔scheduleAtFixedRate(TimerTask, Date, long)

時刻表重複的固定速率執行指定的任務, 在指定的時間開始。後續處決大約在規定的時間間隔內以 進行,並由指定的時間段隔開。

因此,調用任務大概需要86400000毫秒。你真的等了很長時間才能確認它沒有工作嗎?

+0

不,我嘗試了3000毫秒/ 3秒達30秒,但都沒有工作。 864000000,有一天,它是最終會一旦我確認它的工作。 – joseph

相關問題