2015-04-04 249 views
1

我开发这个应用程序,我需要显示启动画面3秒。问题是飞溅窗口在三秒钟内是空白的,并且飞溅图像仅在屏幕上出现主舞台后才显示。任何帮助将非常感激。 继承人我的代码javafx - 启动画面不显示

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(); 
    } 
} 

现在这里的问题是显示窗口舞台后显示的开机画面。

+0

更新:当我把这个类变成Preloader类(即扩展Preloader类)并注释掉这两行时,闪屏图像显示出来。 窗口窗口=新窗口(); // window.show();// – bazi 2015-04-04 04:31:45

回答

2

从来没有在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并发实用程序。

+0

谢谢jewelsea :)这有助于.. – bazi 2015-04-05 14:39:47