Вызов Platform.runLater
не ожидает завершения Runnable
перед возвратом.Из документации ( выделение моя):
Запустите указанный Runnable в потоке приложений JavaFX в некоторое неопределенное время в будущем .Этот метод, который может быть вызван из любого потока, отправит Runnable в очередь событий и , а затем немедленно вернется к вызывающей стороне .Runnables выполняются в порядке их размещения.Runnable, переданный в метод runLater, будет выполнен до того, как любой Runnable будет передан в последующий вызов runLater.Если этот метод вызывается после завершения выполнения JavaFX, вызов будет проигнорирован: Runnable не будет выполнен и не будет выдано исключение.
...
Это означает, что нет никакой гарантии, что текст Button
был обновлен к тому времени, когда вызывается следующее:
System.out.println("after " + button);
Обратите внимание, что если все это произошло в Потоке приложений JavaFX вы все еще не увидите изменения.Это связано с тем, что поток FX не имел бы возможности обработать Runnable
, который все еще будет находиться в очереди событий.
Кроме того, вы не устанавливаете случайное до отношение между записью потока FX в свойство text
и фоновым потоком, считывающим из свойства text
.Даже если потоку FX удалось установить свойство до того, как вы попытаетесь напечатать его System.out
, нет гарантии, что ваш фоновый поток увидит новое значение.