我试图在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);
}
答案 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
来执行暂停按钮尝试启动的方法。