Module java.base 不"opens java.lang.reflect" to module com.jfoenix



在开始描述我是如何得到这个错误之前,这里有一些重要信息:

  1. 在我的项目中使用模块-info.java是至关重要的,因为如果不使用它,jpackage就无法工作
  2. 我使用的是SDK 14.0.2(这是允许使用软件包的最低版本(
  3. 我们将感谢您的每一条评论;不过,如果你要评论与使用特定VM参数有关的内容,我要求你按ctrl+F检查我是否已经在使用你要建议的参数,因为我的build.gradle中有很多VM参数-

好的,让我们来看看我的问题:

首先,关注下面的VM论点:

"--add-opens=java.base/java.lang.reflect=com.jfoenix",

如果我不使用这个参数,程序运行时会弹出以下错误:

java.lang.reflect.InaccessibleObjectException: Unable to make boolean java.lang.reflect.AccessibleObject.setAccessible0(boolean) 
accessible: module java.base does not "opens java.lang.reflect" to module com.jfoenix

重要事项->这就是我的视图在不使用提到的VM参数的情况下显示的内容(让我们称之为图1(:https://snipboard.io/QJ5Fdc.jpg

"好的,那么为什么不直接使用VM参数呢"好问题!好吧,让我们把它添加到我的VM参数中,然后再次运行程序。

这样做之后,我的视图现在是这样的(我们称之为图2(:https://snipboard.io/fbhGxw.jpg

太棒了!这正是我的观点(注意,考虑到它如预期的那样起作用,这次我没有错(。

所以,在一切正常的情况下,我终于可以继续运行我的jpackagegradle任务了。这样做之后,事情就不再有意义了,因为在通过.exe(由jpackage生成(执行程序之后,我的视图看起来像";图像1";视图,而不管当我使用";运行";分级任务。

有什么想法吗?(我的猜测是,我的module-info.java是解决这个问题的关键,因为每次我删除一个"opens"语句,例如:"openmy.package.name to javafx.fxml",程序都会得到几乎相同的错误(

请告诉我是否需要任何代码示例。我们将不胜感激。谢谢

编辑:相关GitHub问题:在此处输入链接描述

我发现正确解决此问题的唯一方法是使用BurningWave:

<dependency>
<groupId>org.burningwave</groupId>
<artifactId>core</artifactId>
<version>12.62.6</version>
</dependency>

添加依赖项后,只需将此代码复制/粘贴到init()方法中(此方法可以而且应该覆盖类中的init方法,该方法扩展了Application类,这是JavaFX应用程序的入口点(

org.burningwave.core.assembler.StaticComponentContainer.Modules.exportAllToAll();
Class<?> bootClassLoaderClass = Class.forName("jdk.internal.loader.ClassLoaders$BootClassLoader");
Constructor<? extends ClassLoader> constructor = ClassLoader.getPlatformClassLoader().getClass().getDeclaredConstructor(bootClassLoaderClass);
constructor.setAccessible(true);
Class<?> classLoadersClass = Class.forName("jdk.internal.loader.ClassLoaders");
Method bootClassLoaderRetriever = classLoadersClass.getDeclaredMethod("bootLoader");
bootClassLoaderRetriever.setAccessible(true);

我不知道jpackage gradle任务是如何工作的,我通过控制台在jdk中使用jpackage工具,在创建包时使用了这个参数

--java-options "--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker=javafx.fxml --add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.colorpicker=javafx.fxml"

在那里,我打开了从场景生成器工具包到javafx.fxml的PaintPicker
正如你所看到的,我不得不打开两个包(它们实际上是五个,但放在这里太多了(,你必须为每个包指定--add-opens才能打开

我正在使用jpackage 将用于打包应用程序的代码y放入

jpackage.exe 
--module-path 
.;D:buildsikonlibrowsertargetikonlibrowser.jar;
D:buildsikonlibrowserlibsiconsikonli-antdesignicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-bootstrapicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-boxicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-bpmn-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-captainicon-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-carbonicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-codicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-coreui-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-dashicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-devicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-elusive-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-entypo-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-evaicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-feather-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fileicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fluentui-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fontawesome-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fontawesome5-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fontelico-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-foundation-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-hawcons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-icomoon-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ionicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ionicons4-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-jamicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ligaturesymbols-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-lineawesome-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-linecons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-maki-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-maki2-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-mapicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-material-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-material2-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-materialdesign-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-materialdesign2-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-medicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-metrizeicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-microns-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ociicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-octicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-openiconic-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-paymentfont-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-prestashopicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-remixicon-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-runestroicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-simpleicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-simplelineicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-subway-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-themify-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-typicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-unicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-weathericons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-websymbols-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-whhg-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-win10-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-zondicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsscenebuilder-kit-16.0.0.jar;
D:buildsikonlibrowserlibsjfoenix-9.0.10.jar
D:buildsikonlibrowserlibsikonli-core-12.2.0.jar;
D:buildsikonlibrowserlibsikonli-javafx-12.2.0.jar
--module jcc.app.ikonlibrowser/jcc.app.ikonlibrowser.Main 
--name "Ikonli Browser" -d D:buildsikonlibrowser
--win-dir-chooser 
--input D:buildsikonlibrowserapp
--vendor jCC 
--app-version "1.0.0"
--java-options 
"--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker=javafx.fxml
--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.colorpicker=javafx.fxml
--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.rotator=javafx.fxml
--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.slider=javafx.fxml
--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.gradientpicker=javafx.fxml"

当然,这只是一行
现在我将逐步解释:
--module-path此参数用于指定应用程序使用的所有模块的路径。包含application.jar
--module此参数指定应用程序的主类。先放模块名,然后放类全名
--name用于指定应用程序名称
-d指定输出路径
--win-dir-chooser在安装打包的应用程序时提供选择安装路径的选项
--input指定包含应用程序外部资源的文件夹
--vendor供应商名称。也许你的名字
--app-version你的应用程序的版本
--java-optionsjvm选项

我希望它对你有效,很抱歉延误了。

最新更新