在java中的秒表

时间:2012-07-19 19:03:18

标签: java timer stopwatch

我试图在java中制作秒表,看起来像00:00:00,一旦按下按钮就开始计数。由于某种原因,它不起作用,但我确信有一些我不知道的东西。

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);
            }

3 个答案:

答案 0 :(得分: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 :(得分:0)

首先,迭代在不到一秒的时间内执行,所以你会有“糟糕的时间”。

你可能需要使用像System.currentTimeMillis()这样的方法来准确你的程序,更好地了解如何处理time的库,或者甚至可以在你的程序中进行1秒钟的简单睡眠(但它不会真的很精确。)

答案 2 :(得分:0)

我会假设,(因为你没有提供任何证据表明不这样做),这只是从主要类别“按原样”执行。你会注意到你的数字增长非常快,根本不像秒表。使用Thread.sleep(1000),以便在每次迭代之间传递一秒钟。

编辑: 如果您的暂停按钮不起作用,我将假设您正在使用Swing并且按钮挂在事件线程上而没有做任何事情。一个简单的解决方法是使pause -> static并使用swing-worker来执行暂停按钮尝试启动的方法。