0

StopWatch クラスを取得したので、Lap 関数を実装したい

実行/停止ボタンを押すと、タイマーがディスプレイ上でカウントを開始します。実行/停止ボタンを再度押すと、タイマーが停止します。もう一度押すと、タイマーがカウントを再開します。タイマーの実行中にラップ/リセットボタンを押すと、ディスプレイがフリーズしてラップタイムが表示され、タイマーはカウントを続けます (表示されないだけです)。ラップ/リセットボタンをもう一度押すと、ディスプレイはリアルタイムでタイマーの表示を再開します。ラップ/リセットボタンを押すと、ディスプレイがフリーズします。タイマーの実行中にラップ/リセット ボタンを押すと、表示がフリーズします (ただし、タイマーは実行し続けます)。ここで 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 に答える