2013-01-10 84 views
1

我有一個Java Swing定時器,它每秒更新一個標籤。啓動計時器後,標籤每秒更新一次,一切正常。Java定時器在隨機時間後不觸發

然後,在隨機時間間隔(從執行變爲執行)之後,標籤停止更新。我在定時器更新代碼中放置了一個斷點,不再被觸發。

我也把日誌語句放在所有我通常會停止計時器的地方,但是這些地方都沒有被調用。

可能是什麼問題?

編輯:這裏是代碼

 ActionListener actionListener = new ActionListener() { 
     @Override 
     public void actionPerformed(java.awt.event.ActionEvent arg0) { 
      secondsRemaining--; 
      System.out.println("Seconds remaining:" + secondsRemaining); 

      //update the progressbar 
      double initialLength = currentSettings.getLength()*60; 
      double progress = (initialLength - secondsRemaining)/initialLength ; 
      progressBarTime.setProgress(progress); 

      //update the progress label 
      progressPercentage.setText(((int)(progress * 100)) + "%"); 

      if (secondsRemaining >= 0) { 
       updateTimeRemaining(secondsToString(secondsRemaining)); 
      } else { 
       System.out.println(">0 seconds TIMER STOPPED with the number of seconds = " + secondsRemaining); 
       treatmentTimer.stop(); 

       // set the status to Finished 
       currentState = State.FINISHED; 
      } 
     } 
    } 

和定時器初始化的樣本:

tTimer = new Timer(1000, actionListener); 
tTimer.start(); 

什麼奇怪的是,該程序正常工作與JRE 7u7安裝在PC上,即定時器更新標籤成功,但我已經嘗試了兩臺電腦與7u10和這個計時器停止問題發生在兩個。

+1

任何地方拋出異常? (日誌文件,系統輸出/錯誤等)?其可能的計時器線程被未捕獲的異常殺死 – radai

+5

請向我們展示您的代碼,我們不是嚮導。 [SSCCE會很棒](http://sscce.org/) – atomman

回答

0

所以我想我解決了這個問題。垃圾回收器正在刪除定時器實例,原因不明。我把一個

System.out.println("message"); 

裏面的定時器的actionlistener,以便它不會被垃圾收集。

1

可能會拋出異常,請使用try catch或Use UncaughtExceptionHandler來跟蹤。