等待一段时间后打印不同的文本(JavaFX)



我打印了一些文本,然后我想等待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();
}
}

JavaFX和几乎所有的用户界面工具包一样,在一个线程上运行。您的sleep调用会阻塞该线程。当该方法处于休眠状态时,不会显示任何窗口,也不会重新绘制任何内容,也不会处理任何用户输入。

简而言之,您不能在JavaFX调用的方法中睡眠或导致任何其他重大延迟。

JavaFX在JavaFX.animation包中提供了许多类,这些类将正确地实现延迟。在您的情况下,PauseTransition将起作用。

PauseTransition delay = new PauseTransition(Duration.seconds(2));
delay.setOnFinished(e -> root.getChildren().add(new Text("adsasd")));
delay.play();

(您也可以创建Thread、ScheduledExecutitorService、delayed CompletableFuture或java.util.Timer,但这些都需要使用Platform.runLater。此外,您已经表示要避免线程。PauseTransition可能是最简单的解决方案。(

最新更新