2012-07-19 105 views
0

我試圖在java中製作一個秒錶,看起來像00:00:00,一旦按下按鈕,它就開始計數。由於某種原因,它不會工作,但我相信有一些我失蹤了。java中的秒錶

for (;;) 
    { 
    if (pause == false) 
      { 
       sec++; 

       if (sec == 60) 
       { 
        sec = 0; 
        mins++; 
       } 
        if (mins == 60) 
        { 
         mins = 0; 
         hrs++; 
        } 

       String seconds = Integer.toString(sec); 
       String minutes = Integer.toString(mins); 
       String hours = Integer.toString(hrs); 

       if (sec <= 9) 
       { 
        seconds = "0" + Integer.toString(sec); 
       } 
       if (mins <= 9) 
       { 
        minutes = "0" + Integer.toString(mins); 
       } 
       if (hrs <= 9) 
       { 
        hours = "0" + Integer.toString(hrs); 
       } 

       jLabel3.setText(hours + ":" + minutes + ":" + seconds); 
      } 
+5

什麼不行? – 2012-07-19 19:05:01

+2

或者更重要的是,這是什麼? – gobernador 2012-07-19 19:05:25

+4

所以每個迭代= 1秒? – 2012-07-19 19:06:52

回答

0

首先,迭代執行時間少於一秒鐘,所以你會有「糟糕的時間」。

您可能需要使用像System.currentTimeMillis()這樣的方法來精確確定程序,知道如何處理time的程序庫,甚至可能在程序中執行1秒鐘的簡單睡眠(但它不會非常精確) 。

+0

這是一個答案...? – NominSim 2012-07-19 19:11:12

+2

好吧,它讓我至少有點 – kritzikratzi 2012-07-19 19:11:55

0

我會假設,(因爲你沒有提供任何證據表明否則),這只是從主要階層'按原樣'執行。您會注意到您的號碼正在以極快的速度增加,並且完全不像秒錶。使用Thread.sleep(1000),因此每次迭代之間都要經過一秒鐘。

編輯: 如果您的暫停按鈕不起作用,我會假設您正在使用Swing,並且該按鈕掛在事件線程上而沒有做任何事情。一個簡單的解決方法是製作pause -> static並使用swing-worker來執行您的暫停按鈕嘗試啓動的方法。

3

我不確定問題出在哪裏,但是把這個塊放到for(;;)循環中肯定是致命的。

嘗試這樣的事情,而不是for循環:

// "1000" here means 1000 milliseconds (1sec). 
new Timer(1000, new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
    if(pause == false){ 
     // ... code from above with the for(;;) 
    } 
    } 
}.start(); 

您可以閱讀documentation for the timer class以獲取更多信息。

+1

你可以用'!pause'替換'pause == false' – 2012-07-19 19:12:15

+0

我實際上發現'''pause == false'''更好看,但是當然...都工作得很好:) – kritzikratzi 2012-07-19 19:14:07

+0

@NominSim加了鏈接,但這是唯一的構造函數定時器了。 – kritzikratzi 2012-07-19 19:18:33