0

我有一个 StopWatch 类,我想实现 Lap 功能

当按下 Run/Stop 按钮时,计时器开始在显示屏上计数。如果再次按下运行/停止按钮,计时器将停止。如果再次按下它,计时器将继续计数,依此类推。如果在计时器运行时按下单圈/重置按钮,显示屏将冻结,并显示单圈时间,并且计时器继续计数(只是不显示)。如果再次按下 Lap/Reset 按钮,显示屏将恢复实时显示计时器。如果按下 Lap/Reset 按钮,则显示会冻结,依此类推。如果在计时器运行时按下 Lap/Reset 按钮,显示屏将冻结(但计时器继续运行)。如果现在按下 Run/Stop 按钮,计时器将停止计数,但显示屏会继续显示单圈时间。如果按下 Lap/Reset 按钮,然后显示屏变为显示计​​时器(现在已停止)。如果现在按下 Run/Stop 按钮,计时器将继续计数。或者,如果按下圈数/重置按钮,计时器将重置为零。

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

我只是无法让我的膝上功能工作。基本秒表工作正常,知道吗?我更新了要求,只是想检查我按下按钮的逻辑,现在如果我点击开始和圈显示将冻结,但如果我点击开始开始和圈显示将继续更新。

4

1 回答 1

0

running易挥发吗?如果怀疑不是,这意味着线程可以缓存该值甚至内联它,这意味着它不会看到更改,可能永远不会看到它们。

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

于 2013-06-10T12:57:22.287 回答