尝试将 LauncherImpl 用于预加载器时 JavaFX/Intellij 设置出现问题

Problem With JavaFX/Intellij Setting When Try To Use LauncherImpl For Preloader

java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.IllegalAccessError: class MainFile.Main (in unnamed module @0x234bef66) cannot access class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.application to unnamed module @0x234bef66
    at MainFile.Main.main(Main.java:100)
    ... 11 more
Exception running application MainFile.Main

这是我遇到的异常,我知道这不是代码问题,这与 IntelliJ 有关,但我不知道我应该怎么做才能解决这个问题.

我发现的一些可能的方法或许可行

1) VM Option in the Configuration 2) add-export

请告诉我如何解决这个问题。提前致谢!

您至少有两个选择:

  1. 添加一个 VM 参数以将所需的包导出到您的代码中。由于您的代码在未命名模块中,因此这样的参数看起来像:

    --add-exports javafx.graphics/com.sun.javafx.application=ALL-UNNAMED
    

    注意: 如果您将代码模块化,请将 ALL-UNNAMED 替换为您的模块名称。

    添加此参数的位置取决于应用程序的启动方式。您必须确保您的应用程序在编译和执行时使用该参数,包括在部署之后。

  2. 在启动应用程序之前设置 javafx.preloader 系统 属性 并完全停止使用 LauncherImpl。这可以在命令行上完成:

    -Djavafx.preloader=com.example.PreloaderImpl
    

    或者在main方法中:

    public static void main(String[] args) {
      System.setProperty("javafx.preloader", PreloaderImpl.class.getName());
      Application.launch(ApplicationImpl.class, args);
    }
    

第二种选择可能是两者中更容易实施的。