我正在制作一个秒表,并到达最后一个阶段,必须在JLabel中显示时间。但是,显示似乎并不完全准确。
预期输出:00:00:000(计时器应该从该值开始计数) 实际输出:30:00:000(这是实际起始值。)
不知何故,我不知道数字“ 3”来自哪里。
private void startTimer() {
Thread thread = new Thread(new Runnable() {
public void run() {
timer.start();
while (true) {
if (!paused) {
final String timeString = new SimpleDateFormat("mm:ss:SSS").format(timer.getElapsedTime());
timeLabel.setText(timeString);
}
else
{
timer.pause();
}
}
}
});
thread.start();
}
#THIS IS THE STOPWATCH CLASS
public class StopWatch {
private long startTime = 0;
private long stopTime = 0;
private long pausedTime = 0;
private boolean running = false;
public void start() {
this.startTime = System.currentTimeMillis();
pausedTime = 0;
this.running = true;
}
public void stop() {
this.stopTime = System.currentTimeMillis();
this.running = false;
}
public void pause() {
if(running) {
pausedTime = System.currentTimeMillis();
stop();
}
}
public void resume() {
if(!running){
long duration = System.currentTimeMillis() - pausedTime;
startTime += duration;
this.running = true;
}
}
//elaspsed time in milliseconds
public long getElapsedTime() {
long elapsed;
if (running) {
elapsed = (System.currentTimeMillis() - startTime);
} else {
elapsed = (stopTime - startTime);
}
return elapsed;
}
}
找到了解决方案
timeLabel.setText
(
String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(timer.getElapsedTime()),
TimeUnit.MILLISECONDS.toMinutes(timer.getElapsedTime()) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timer.getElapsedTime())),
TimeUnit.MILLISECONDS.toSeconds(timer.getElapsedTime()) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timer.getElapsedTime()))));
在阅读了类似的文章之后,我已经成功地将时间格式化为所需的格式(hh:mm:ss),并且计时器运行得很好。 但是,我将研究更多的格式化方法,并尝试将代码修改为更简单的形式。