[英]Printing a different text after waiting a certain period of time (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、ScheduledExecutorService、delayed CompletableFuture 或 java.util.Timer,但这些都需要使用Platform.runLater 。另外,您已经表明您正在尝试避免线程。PauseTransition 可能是最直截了当的解决方案。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.