尝试将 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
请告诉我如何解决这个问题。提前致谢!
您至少有两个选择:
添加一个 VM 参数以将所需的包导出到您的代码中。由于您的代码在未命名模块中,因此这样的参数看起来像:
--add-exports javafx.graphics/com.sun.javafx.application=ALL-UNNAMED
注意: 如果您将代码模块化,请将 ALL-UNNAMED
替换为您的模块名称。
添加此参数的位置取决于应用程序的启动方式。您必须确保您的应用程序在编译和执行时使用该参数,包括在部署之后。
在启动应用程序之前设置 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);
}
第二种选择可能是两者中更容易实施的。
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
请告诉我如何解决这个问题。提前致谢!
您至少有两个选择:
添加一个 VM 参数以将所需的包导出到您的代码中。由于您的代码在未命名模块中,因此这样的参数看起来像:
--add-exports javafx.graphics/com.sun.javafx.application=ALL-UNNAMED
注意: 如果您将代码模块化,请将
ALL-UNNAMED
替换为您的模块名称。添加此参数的位置取决于应用程序的启动方式。您必须确保您的应用程序在编译和执行时使用该参数,包括在部署之后。
在启动应用程序之前设置
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); }
第二种选择可能是两者中更容易实施的。