繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM