Java秒表计时器不会停止
我有一个秒表类,我想实现圈功能
当按下运行/停止按钮时,计时器开始在显示屏上计数。如果 再次按下运行/停止按钮,计时器停止。如果再次按下,则 计时器继续计数,以此类推。 如果在计时器运行时按下“圈速/复位”按钮,显示屏 冻结,并显示圈速,计时器继续计数(只是没有) 显示)。如果再次按下圈速/复位按钮,显示屏将恢复显示 定时器是实时的。如果按下“圈速/复位”按钮,显示屏 冻结等等。 如果在计时器运行时按下“圈速/复位”按钮,显示屏 冻结(但计时器仍在运行)。如果现在按下运行/停止按钮, 计时器停止计数,但显示屏继续显示圈速。如果 按下Lap/Reset(圈/复位)按钮后,显示屏将更改为显示计时器(该计时器 现在已停止)。如果现在按下运行/停止按钮,计时器将恢复 数数。或者,如果按下“圈速/重置”按钮,计时器将重置为 零
public void startStop() {
timer = new Timer(100, new TimerHandler());
if (!isRunning) {
isRunning = true;
timer.start();
} else {
isRunning = false;
timer.stop();
}
//If now the Run/Stop button is pressed the timer resumes counting
if(!lapPress && !isRunning){
isRunning = true;
}
}
public void lapReset() {
if (!lapPress) {
lapPress = true;
} else if (lapPress) {
lapPress = false;
}
System.out.println(isRunning + " " + lapPress);
// Lap pressed + timer running -> show lap-time + timer continue
if (isRunning && lapPress) {
timer.stop();
}
// Lap press + timer running
if (isRunning && !lapPress) {
timer.start();
}
}
我就是没法用膝盖功能。基本的秒表工作正常,知道吗?我更新了要求,只是想检查我按下按钮的逻辑,现在如果我单击开始和圈,显示屏将冻结,但如果我单击开始和圈,显示屏将继续更新
# 1 楼答案
running
是易变的吗?如果怀疑它不是,这意味着线程可以缓存该值,甚至可以内联它,这意味着它不会看到更改,可能永远也看不到它们http://vanillajava.blogspot.com/2013/01/java-memory-model-and-optimisation.html