0

我试图在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);
            }
4

3 回答 3

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

您可以阅读计时器类的文档以获取更多信息。

于 2012-07-19T19:11:26.387 回答
0

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

您可能需要使用诸如System.currentTimeMillis()精确程序之类的方法,更了解如何处理time的库,甚至可能需要在程序中简单地休眠 1 秒(但这不会很精确)。

于 2012-07-19T19:10:01.420 回答
0

我将假设,(因为您没有提供任何证据表明其他情况),这只是从 Main-Class 中“按原样”执行的。你会注意到你的数字增长得非常快,根本不像秒表。在每次迭代之间使用Thread.sleep(1000)第二遍。

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

于 2012-07-19T19:11:12.343 回答