RuntimeException:在模块jrt.fs和模块java.base中打包jdk.internal.jimage.decompressor

Nam*_*man 7 java intellij-idea java-platform-module-system java-9 intellij-17

组件详细信息 - 使用IntelliJ IDEA 2017.1 CEjdk-9-ea + 154

main() -

Set<String> set2 = Set.of("a", "b", "c");
set2.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

module-info.java

module collection {
    requires java.base;
}
Run Code Online (Sandbox Code Playgroud)

日志 -

Error occurred during initialization of VM
java.lang.RuntimeException: Package jdk.internal.jimage.decompressor in both module jrt.fs and module java.base
    at jdk.internal.module.ModuleBootstrap.fail(java.base@9-ea/ModuleBootstrap.java:699)
    at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:329)
    at java.lang.System.initPhase2(java.base@9-ea/System.java:1928)
Run Code Online (Sandbox Code Playgroud)

对VM初始化实施感到怀疑,我的问题是我还没有包含模块jrt.fs- 图片来自哪里?如何调试此类模块包含/排除?如何进一步解决当前异常?

Gun*_*ein 7

我在 Manjaro Linux 上遇到了同样的问题,而它在 Windows 上运行良好。查看差异后,很明显 javafx 11 包安装到 /lib/jvm/java-11-openjdk/lib 中,然后我将其设置为 PATH_TO_FX。这似乎是问题所在,因为 jrt-fs.jar 位于同一文件夹中。

我将所有文件从 fx 移动到一个单独的文件夹,然后将其设置为 PATH_TO_FX。现在它工作正常。


Dha*_*ore 6

要解决此问题,请按照以下步骤操作。1-右键单击您的班级。2 - 运行 AS -> 运行配置 3. 单击 main -> 单击 Browse 选项并在项目中选择您的项目名称。单击“应用”按钮,处理后单击“运行”按钮。


小智 6

我在 Arch Linux 下遇到了同样的错误。该包java-openjfx将其库安装到 的 lib 目录中openjdk,这似乎会导致问题。我找到了一种解决方法,不是添加整个 lib 目录,而是只添加所需的库。

在项目结构 > 库 > + > Java > /usr/lib/jvm/default/lib > 选择需要的库(按住 ctrl) 应该看起来像这样

然后在运行配置中相应地设置虚拟机选项

    --module-path /usr/lib/jvm/java-14-openjdk/lib/javafx.base.jar:/usr/lib/jvm/java-14-openjdk/lib/javafx.controls.jar:/usr/lib/jvm/java-14-openjdk/lib/javafx.graphics.jar --add-modules=javafx.controls
Run Code Online (Sandbox Code Playgroud)

对于我的项目,仅将控件添加为模块就足够了,但需要基础和图形的路径才能使其运行。

  • 这就是我的问题所在。我正在使用“javafx.controls”和“javafx.fxml”。我必须添加 ```--module-path /usr/lib/jvm/java-11-openjdk/lib/javafx.controls.jar:/usr/lib/jvm/java-11-openjdk/lib/javafx。 fxml.jar:/usr/lib/jvm/java-11-openjdk/lib/javafx.graphics.jar:/usr/lib/jvm/java-11-openjdk/lib/javafx.base.jar --add-modules javafx.controls,javafx.fxml ``` 只需先添加模块,它会在运行时警告您缺少库。如果不是就一一添加 (2认同)

Ala*_*man 5

$ JAVA_HOME/lib/jrt-fs.jar包含编译到JDK 8的"jrt"文件系统提供程序的副本.它适用于在JDK 8上运行但需要访问JDK 9运行时映像的IDE等工具.

从异常开始,看起来这个JAR文件,或者可能是$ JAVA_HOME/lib,已经错误地放在了模块路径上.在顶级目录中不包含module-info.class的JAR文件被视为自动模块,因此这就是消息中异常具有"module jrt.fs"的原因.异常基本上只是意味着你最终得到了两个包含jdk.internal.jimage.decompressor包(以及许多其他包)的模块,因为它将jrt-fs.jar放在模块路径上.

  • 那么你如何解决这个问题呢? (7认同)