假设我安装了 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
我明白了:
Error occurred during initialization of boot layer java.lang.LayerInstantiationException: Package jdk.internal.jrtfs in both module java.base and module jrt.fs
如果我尝试删除“jrs.fs”,那么我的应用程序就会崩溃,因为缺少一些与类加载器相关的重要系统类。 使用 Java 11 启动 JavaFX 应用程序的正确方法是什么? 现在我是否需要每次为每个应用程序重新分发 JavaFX(因为现在必须在启动应用程序的命令行中指定它的位置)。
最佳答案
我发现从 Java 8 转换到 Java 11 时,您只需在 Maven 下添加 OpenJfx 作为依赖项即可(假设您使用的是 Maven)。 例如
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.1-ea+1</version>
</dependency> etc
然后就可以运行了
java -cp .;.\lib --module-path .\lib;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jar
其中 Java 11 位于路径中,所有 Maven 依赖项(模块化或其他)都位于 lib
子目录中。模块依赖项必须添加到 add-modules
列表中。
我随后发现,如果将模块放置在另一个目录中,例如 javafx 模块(加上 add-modules 中的任何内容),问题就会减少
java -cp .;.\lib --module-path .\modules;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jar
关于java - 如何使用 Java 11 启动 JavaFX 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53181484/