Java StopWatch计时器不会停止

时间:2013-06-10 12:45:43

标签: java timer

我有一个StopWatch类,我想实现Lap函数

按下运行/停止按钮时,计时器开始在显示屏上计数。如果 再次按下运行/停止按钮,计时器停止。如果再次按下,则 计时器恢复计数,等等。 如果在计时器运行时按下了Lap / Reset按钮,则显示 冻结,并显示单圈时间,计时器继续计数(它只是不是 显示)。如果再次按下Lap / Reset按钮,显示屏将继续显示 计时器实时。如果按下Lap / Reset按钮,则显示 冻结,等等。 如果在计时器运行时按下了Lap / Reset按钮,则显示 冻结,(但计时器继续运行)。如果现在按下运行/停止按钮, 计时器停止计时,但显示屏继续显示单圈时间。如果 按下Lap / Reset按钮,显示屏随后会改变以显示计时器(其中 现在停止了)。如果现在按下运行/停止按钮,计时器将恢复 数数。或者,如果按下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 个答案:

答案 0 :(得分:0)

running是否有波动?如果怀疑它不是意味着线程可以缓存值,甚至内联它意味着它不会看到更改,可能永远不会看到它们。

http://vanillajava.blogspot.com/2013/01/java-memory-model-and-optimisation.html