Java não segue o código? [duplicado]

Esta questão já tem uma resposta aqui:

Loop não vê valor alterado por outro thread sem um comando print 1 resposta

Aqui está um trecho do código que eu acho que não segue o que o código deve fazer:

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

Se eu comentar

System.out.println("Hi")

O código aparentemente não funciona. Se eu descomentar, então acontece!

Nota: o início é verdadeiro assim que você pressionar 's' para iniciar o jogo. No entanto, o método é chamado no começo, então "hi" deve ser exibido muitas vezes e indefinidamente até que eu pressione a tecla 's'.

Uma imagem diz mais que mil palavras, então eu vou te dar centenas de fotos (vídeo) para explicar o que eu quero dizer:https://dl.dropbox.com/u/2792692/CodeWeird.ogv

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

Alguém pode me contar o que está acontecendo?

questionAnswers(2)

yourAnswerToTheQuestion