假设我安装了Oracle JDK 11 (只是为了使事情更简单)。然后我下载了胶子的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中的包jrt.fs时发生错误
我尝试删除"jrs.fs“,然后我的应用程序崩溃,因为与类加载程序相关的一些重要的系统类丢失了。用Java11启动JavaFX应用程序的正确方法是什么?现在,我是否需要每次在每个应用程序中重新分发JavaFX (因为现在它的位置必须在启动应用程序的命令行中指定)。
发布于 2018-11-18 00:18:08
我已经发现,当从Java 8转换到Java11时,您只需将OpenJfx作为Maven下的依赖项添加(假设您正在使用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位于Path中,所有Maven依赖项(模块化或其他)都位于lib子目录中。模块依赖关系必须添加到add-modules列表中。
我随后发现,如果模块放在另一个目录中,例如javafx模块(加上添加模块中的任何内容),问题就会更少。
java -cp .;.\lib --module-path .\modules;. --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.swing -jar MyApp.jarhttps://stackoverflow.com/questions/53181484
复制相似问题