2011-05-01 193 views
0

所以我正在試驗一個小小的秒錶對象,我無法弄清楚它爲什麼不起作用。我有以下幾個gui: timeinfield是用戶輸入時鐘開始時間的jtextfield。 timerfield是一個jtextfield,時鐘顯示時間。 startbutton是用戶點擊以啓動時鐘的jbutton。 stopbutton是用戶點擊以停止時鐘的jbutton。需要幫助獲取簡單的秒錶工作?

現在,計時器區域只顯示運行:0秒。 沒有其他事情發生,也許我做這個錯誤,因爲這是我第一次嘗試這樣的事情。我即將開始學習如何使用線程,所以我認爲這可能有助於我開始。

private void startbuttonActionPerformed(java.awt.event.ActionEvent evt) { 

     String starttim = timeinfield.getText(); 
     long startTime = Long.valueOf(starttim); 
     boolean running = false; 
     Timer timer = null; 

     long time = (System.currentTimeMillis() - startTime)/1000; 

     timerfield.setText("Running:" + time + "seconds"); 
     if (running==false) { 
      running = true; 
      timerfield.setText("Running: 0 seconds"); 
     } 
     if (stopbutton.isSelected()) { 
      timer.stop(); 
      running = false; 
      long endTime = evt.getWhen(); 
      double seconds = (endTime - startTime)/1000.0; 
      timerfield.setText("Time: " + seconds + "sec."); 
     } 
} 

回答

2

它只顯示「正在運行:0秒」,因爲在timerfield.setText("Running: 0 seconds");之後,您從不更新GUI。

此外,您嘗試執行timer.stop();而計時器爲空,這將導致NullPointerException。

還有一件事:每次單擊按鈕時,運行都將是錯誤的,因爲它是一個局部變量,每次都會初始化爲false。如果您希望它是永久的,請將其移出該方法,然後在外部初始化它。

1

你永遠不會啓動一個Timer來完成更新字段的工作。

-1

幾個一樣的東西你的代碼錯誤,有的已發現:-)都有一個共同的原因:

你似乎沒有聽到你在做什麼;-)

有很好的理解

我的建議是採取任何成功任務的第一步:仔細閱讀教科書/教程的相關章節在Swing閱讀的背景下,Snoracle的在線教程是必須要學習使用計時器,相關章節是

http://download.oracle.com/javase/tutorial/uiswing/misc/timer.html

下一步是運用你所瞭解您的背景下,開始簡單(f.i漏下的開始時間類型的能力)和identiying您需要的部分,並保持獨立的部分分開!提示:你需要3個actionListeners。只有在運行一個簡單的示例時,纔會逐個增加複雜性。沖洗,重複...

哦......學習並堅持java命名約定!不這樣做會使代碼難以閱讀,即使對於你自己也是如此:-)