Печать другого текста после ожидания определенного периода времени (JavaFX) - PullRequest
0 голосов
/ 10 марта 2020

Я печатаю некоторый текст, а затем хочу подождать 2 секунды и напечатать что-нибудь еще на экране. Я погуглил вокруг, и все кажется излишним, используя потоки и вызывая методы. Я уверен, что есть более простой способ.

Вот что я попробовал:

public class Test extends Application {

    @Override
    public void start(Stage primaryStage) {

        GridPane root = new GridPane();
        primaryStage.setScene(new Scene(root, 1000, 1000));
        Text text = new Text("bla");




        root.getChildren().addAll(text);        
        primaryStage.show();

        try {
            Thread.sleep(2000);
        }
        catch(Exception e) {

        }
        root = new GridPane();
        root.getChildren().addAll(new Text("adsasd"));
        primaryStage.show();

    }


    public static void main(String[] args) {
        Test.launch();
    }
}

1 Ответ

3 голосов
/ 10 марта 2020

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, вероятно, является наиболее простым решением.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...