JavaFX, как и почти все наборы инструментов пользовательского интерфейса, работает в одном потоке. Ваш sleep
вызов блокирует эту ветку. Пока метод находится в спящем режиме, windows не отображается, ничего не перерисовывается и пользовательский ввод не обрабатывается.
Короче говоря, вы не можете спать или вызывать любые другие значительные задержки в методе, вызываемом JavaFX.
JavaFX предоставляет множество классов в пакете javafx.animation , которые должным образом определяют задержки. В вашем случае будет работать PauseTransition.
PauseTransition delay = new PauseTransition(Duration.seconds(2));
delay.setOnFinished(e -> root.getChildren().add(new Text("adsasd")));
delay.play();
(Вы также можете создать Thread, ScheduledExecutorService, отложенное CompletableFuture или java .util.Timer, но для этого потребуется использовать Platform.runLater . Кроме того, вы указали, что пытаетесь избежать потоков. PauseTransition, вероятно, является наиболее простым решением.)