在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);

10-07 13:53