JavaFX - 启动画面不显示

JavaFX - Splash screen not showing

我正在开发一个需要显示启动画面 3 秒的应用程序。问题是启动画面 window 空白三秒钟,启动画面只有在主舞台出现在屏幕上后才会显示。

这是我的代码:

class Launcher extends Application {
    @Override
    public void start(Stage stage) {
        Pane splashLayout = new VBox();
        ImageView splashImage = new ImageView(new Image(getClass().getResourceAsStream("splash/splash.png")));
        splashLayout.getChildren().add(splashImage);
        Scene scene = new Scene(splashLayout, Color.TRANSPARENT);
        stage.initStyle(StageStyle.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
        Thread.sleep(3000); // wait for three seconds.
        Window window = new Window(); // main stage
        window.show();
        stage.hide();
    }
}

现在的问题是在显示 Window 阶段后才显示初始图像。

从不 在 JavaFX 应用程序线程上调用睡眠 - 它所做的只是挂起您的 UI(这就是您的代码中发生的事情)。

改用 PauseTransition

splashStage.show();
PauseTransition pause = new PauseTransition(Duration.seconds(3_000));
pause.setOnFinished(event -> {
        Stage mainStage = new Stage();
        mainStage.setScene(createMainScene());
        mainStage.show();
        splashStage.hide();
});
pause.play();

还有,不要打电话给new Window()。改为调用 new Stage() - 阶段比 Windows 更实用,没有真正的理由放弃该功能并使用 Window。


有时,您想在显示启动画面时做一些工作(有些 I/O,一项计算密集型任务,用馅饼加载霍比特人,寻找矮人,等等),在这种情况下您可以使用splash screen sample.

中演示的 JavaFX 并发实用程序