【发布时间】:2019-04-10 09:52:56
【问题描述】:
假设我安装了 Oracle JDK 11(只是为了让事情更简单)。然后我下载了 Gluon 的 JavaFX 11 并在 JDK 上解压。实际上,我在哪里解压 JavaFX 并不重要(因为我的下一个目标是制作我自己的基于 OpenJRE 的 JRE 安装程序)。 然后我正在尝试启动应用程序:
c:\Program Files\MyApp>"c:\Program Files\Java\jre-11\bin\java"
--module-path="c:\Program Files\Java\jre-11\lib"
--add-modules=javafx.controls
--add-modules=javafx.base -jar ./MyApp.jar
我明白了:
启动层初始化时出错 java.lang.LayerInstantiationException:在模块 java.base 和模块 jrt.fs 中都打包 jdk.internal.jrtfs
我尝试删除“jrs.fs”然后我的应用程序崩溃了,因为一些与类加载器相关的重要系统类丢失了。 使用 Java 11 启动 JavaFX 应用程序的正确方法是什么? 我现在是否需要每次都为每个应用程序重新分发 JavaFX(因为现在必须在启动应用程序的命令行中指定它的位置)。
【问题讨论】:
-
jre-11\lib是否包含 JavaFX SDK jar?是否还包含其他可能不应该成为模块路径一部分的 jar?您是否尝试过将 JavaFX SDK jar 单独放在一个文件夹中?你检查过getting started guide吗? -
我不确定您的问题,但如果您已经添加了
javafx.controls,则无需通过--add-modules添加javafx.base。javafx.controls模块将同时引入javafx.base和javafx.graphics模块。 -
模块
jrt.fs导致模块路径在哪里,如果不存在则缺少哪些类? -
何塞,是的,它包含所有的罐子。如果路径上有几个相同的模块,将 jar 移动到不同的文件夹会有什么帮助?
-
nullpointer, jrt.fs 在 JDK 的 lib 文件夹中,它位于模块路径中。很难说缺少哪些类,因为它们似乎有很多——类加载器根本不起作用。我将花一些时间尝试了解所有依赖项。
标签: java javafx java-11 javafx-11