¿Java no sigue el código? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

Loop no ve el valor cambiado por otro hilo sin una declaración de impresión 1 respuesta

Aquí hay un fragmento del código que creo que no sigue lo que debería hacer el código:

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

Si comento

System.out.println("Hi")

El código aparentemente no funciona. Si lo descomento, entonces lo hace!

Nota: el inicio es verdadero tan pronto como presionas 's' para iniciar el juego. Sin embargo, el método se llama al principio, por lo que "hi" se debe mostrar muchas veces e indefinidamente hasta que presione la tecla 's'.

Una imagen vale más que mil palabras, así que te daré cientos de imágenes (video) para explicar lo que quiero decir:https://dl.dropbox.com/u/2792692/CodeWeird.ogv

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

¿Alguien puede decirme qué está pasando?