在Java 8中,我可以使用以下方法使用预加载器启动JavaFX应用程序:
LauncherImpl.launchApplication(WindowMain.class, WindowMainPreloader.class,
new String[]{...});
我更喜欢从上面的代码开始,而不是使用部署配置,因为我不希望图形界面在每次启动应用程序时都启动,而只是在一些计算出应用程序应该在其中运行的代码之后才启动GUI模式。
我使用的是“com.sun.javafx.application.LauncherImpl”类,但显然在Java 9中,所有以“com.sun”开头的类均已删除。那么,如何在Java 9中使用预加载器启动应用程序?
最佳答案
关于这个问题的答案有一条评论:
How to create splash screen as a Preloader in JavaFX standalone application?
我没有尝试过,但是也许您可以尝试设置该属性,然后通过公共(public) Application.launch(appClass, args)
API启动您的主应用程序,然后预加载器将首先启动。
查看Application.launch
的代码,看来这可行。这是最终调用的代码,从Java 8源复制而来:
public static void launchApplication(final Class<? extends Application> appClass,
final String[] args) {
Class<? extends Preloader> preloaderClass = savedPreloaderClass;
if (preloaderClass == null) {
String preloaderByProperty = AccessController.doPrivileged((PrivilegedAction<String>) () ->
System.getProperty("javafx.preloader"));
if (preloaderByProperty != null) {
try {
preloaderClass = (Class<? extends Preloader>) Class.forName(preloaderByProperty,
false, appClass.getClassLoader());
} catch (Exception e) {
System.err.printf("Could not load preloader class '" + preloaderByProperty +
"', continuing without preloader.");
e.printStackTrace();
}
}
}
launchApplication(appClass, preloaderClass, args);
}
因此,您应该能够使用以下命令通过预加载器启动应用程序:
System.setProperty("javafx.preloader", "my fully qualified preloader class name");
Application.launch(myMainClass, args);