Имейте в виду, что кнопка onAction
кнопки вызывается в потоке JavaFX, поэтому вы фактически останавливаете свой поток пользовательского интерфейса в течение 5 секунд. Когда поток пользовательского интерфейса не замораживается в конце этих пяти секунд, оба изменения применяются последовательно, поэтому вы можете видеть только второе.
Вы можете исправить это, выполнив весь код выше в новом потоке:
Button button = new Button();
button.setOnAction(event -> {
Thread t = new Thread(() -> {
Platform.runLater(() -> field.setText("START"));
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
Platform.runLater(() -> field.setText("END"));
});
t.start();
});