Java nie przestrzega kodu? [duplikować]

To pytanie ma już tutaj odpowiedź:

Pętla nie widzi wartości zmienionej przez inny wątek bez instrukcji drukowania 1 odpowiedź

Oto fragment kodu, który według mnie nie jest zgodny z kodem, który powinien zrobić:

public void updateTimeElapsed() {
    timeElapsedLabel.setText("Time elapsed: " + ((System.nanoTime() - time) / Math.pow(10, 9)));
}

public void updateTimeElapsedIndefinitely() {
    while (true) {
        //System.out.println("Hi");
        //TODO: Why this no work?
        if (start) { System.out.println("Shoulda'"); updateTimeElapsed(); }
    }
}

Jeśli komentuję

System.out.println("Hi")

Kod najwyraźniej nie działa. Jeśli go odkomentuję, to tak!

Uwaga: start jest prawdziwy, gdy tylko naciśniesz 's', aby rozpocząć grę. Jednak metoda ta jest wywoływana na początku, więc „cześć” powinna być wyświetlana wiele razy i na czas nieokreślony do momentu naciśnięcia klawisza „s”.

Obraz mówi tysiąc słów, więc dam ci setki zdjęć (wideo), aby wyjaśnić, co mam na myśli:https://dl.dropbox.com/u/2792692/CodeWeird.ogv

https://dl.dropbox.com/u/2792692/CodeWeird.wmv

Czy ktoś może mi powiedzieć, co się dzieje?

questionAnswers(2)

yourAnswerToTheQuestion