Я считаю, что вы забыли поместить свой код пользовательского интерфейса в поток приложений JavaFX. Я рекомендую вам поместить свой код пользовательского интерфейса в Platform.runLater(() -> { /* your JavaFX code. */ }
или использовать Task , чтобы отделить то, что должно или не должно быть в потоке приложений JavaFX.
Если это не сработало для вас, проблема может заключаться в возможной ошибке JavaFX, о которой сообщил один из разработчиков в комментарии к методу impl_updatePeer и классу Region:
// TODO I think we have a bug, where if you create a Region with an Image that hasn't
// been loaded, we have no listeners on that image so as to cause a pulse & repaint
// to happen once the image is loaded. We just assume the image has been loaded
// (since when the image is created using new Image(url) or CSS it happens eagerly).