2011-05-01 217 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命名约定!不这样做会使代码难以阅读,即使对于你自己也是如此:-)