2014-11-01 57 views
0

爲什麼getTime()方法返回null值?當time被聲明爲static變量時,它返回一個非空值,但是我們不能用不同的時間創建對象。如何在以下片段代碼中獲取時間

package timecounter; 

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

public class Timerx extends TimerTask { 

    int H, M, S; 
    Timer timer; 
    String time; 

    @Override 
    public void run() { 
     S++; 
     if (S >= 60) { 
      M++; 
      S = 0; 
      if (M >= 60) { 
       H++; 
       M = 0; 
       if (H >= 12) { 
        H = 0; 
       } 
      } 
     } 
     this.time = String.format("%2d:%2d:%2d", H, M, S); 
     System.out.print("Running"); 
    } 
    public void start() { 
     timer.schedule(new Timerx(), 1000, 1000); 
    } 
    public Timerx() { 
     this.timer = new Timer(); 
    } 
    public String getTime() {// here return null value 
     return time; 
    } 

} 
+1

你是什麼意思「它返回時」字符串靜態時間「變量」?我的猜測是,你在一個新的實例上調用'getTime()',而不是定時器實際觸發的那個。 – 2014-11-01 10:45:29

+0

'start()'似乎安排了一個'新的Timerx()'而不是'this'。我想這是問題。 – 2014-11-01 10:46:06

+0

其實我不能得到它返回空值的時間。當我改變時間變量字符串它的工作,但timeCounter在同一時間返回 – 2014-11-02 06:07:48

回答

0

替換:

timer.schedule(new Timerx(), 1000, 1000); 

有了:

timer.schedule(this, 1000, 1000); 

但是這個代碼的和平是不是很好。你想有多個計時器計數器,但每個時間任務有自己的計時器。每個定時器都需要一個線程來提供服務。一個計時器最好使用多個時間任務。

E.g.替換

Timer timer; 

與:

static Timer timer = new Timer(); 

或解壓到一個單獨的單例類例如收銀臺服務。

+0

非常感謝。我會嘗試 – 2014-11-02 05:50:06

相關問題