带有 Spring Boot 的 Java Fx 启动画面

问题描述 投票:0回答:2
JavaFX 11 和 Spring Boot 2.0。

我想显示一个启动屏幕,直到 Spring 初始化所有必需的 bean,并且在 spring.run() 中我想关闭启动阶段(或至少在 x 秒后)。这样连接到数据库创建 POJO 等。但是当我尝试在 FX 线程启动之前显示启动屏幕时,它会抛出:

Caused by: java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = main()

我什至尝试过

Platform.runLater()

但仍然没有成功。有解决这个问题的方法吗?谢谢。

public class StartUp extends Application{ public static void main(String[] args) { loadSplashScreen(); appContext = SpringApplication.run(StartUp.class); launch(args); } @Override public void start(Stage stage) { Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); stage.setScene(new Scene(root, 300, 275)); stage.show(); } static void loadSplashScreen() { Stage splashStage = new Stage(); try { BorderPane splashPane = FXMLLoader.load(getClass().getResource("splash.fxml")); Scene splashScene = new Scene(splashPane); splashStage.setScene(splashScene); splashStage.show(); setFadeInOut(splashPane, splashStage); } catch (IOException e) { e.printStackTrace(); } } static void setFadeInOut(Parent splashScene, Stage splashStage) { FadeTransition fadeIn = new FadeTransition(Duration.seconds(3), splashScene); fadeIn.setFromValue(0); fadeIn.setToValue(1); fadeIn.setCycleCount(1); FadeTransition fadeOut = new FadeTransition(Duration.seconds(3), splashScene); fadeOut.setFromValue(1); fadeOut.setToValue(0); fadeOut.setCycleCount(1); fadeIn.play(); fadeIn.setOnFinished((e) -> fadeOut.play()); fadeOut.setOnFinished((e) -> splashStage.close()); } }
    
java spring-boot javafx javafx-11
2个回答
0
投票
在您的代码中,您有一个名为

loadSplashScreen()

 的方法,您可以在 
Application.launch()
 之前调用该方法。这将是对 
launch
 方法的调用,从而启动 JavaFX 线程,这就是您的 
loadSplashScreen()
 方法失败的原因,即调用此方法时,JavaFX 线程甚至还没有启动。

在尝试使用 Spring Boot 启动 JavaFX 之前,您可能需要查看

此处有关 PreLoaders 的 Oracle 教程,了解如何理解基本示例。

虽然我还没有从 Spring Boot 启动 JavaFX,但我在 OSGi 包中做了类似的事情,你可能想看看我的 FlexFx GitHub 存储库

这里,它可能会为你提供一些关于如何使用预配置的指导。使用 Spring Boot 加载程序,但请注意,我目前无法在我的项目中显示启动屏幕。

最后,您的问题会发生在 JavaFX-8、9 或 10 上。它不是 JavaFX-11 特有的。


0
投票
这里有两个现成的模板,包含 JavaFX、Spring Boot 和 Maven/Gradle 以及一个闪屏。

我将感谢 GitHub 上的明星支持它的免费开源,从而帮助您解决问题。

<3

https://github.com/davidweber411/javafx-JavaFxSpringBootGradleApp

https://github.com/davidweber411/javafx-JavaFxSpringBootMavenApp

© www.soinside.com 2019 - 2024. All rights reserved.