假设我安装了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(因为现在必须在启动应用程序的命令行中指定它的位置) .
1 回答
我发现在从Java 8转换到Java 11时,您可以在Maven下添加OpenJfx作为依赖项(假设您使用的是Maven) . 例如
然后你就可以跑了
其中Java 11位于Path中,并且所有Maven依赖项(模块化或其他)都位于
lib
子目录中 . 必须将模块依赖项添加到add-modules
列表中 .我后来发现,如果将模块放在另一个目录中,例如javafx模块(加上add-modules中的任何内容),你会遇到的问题更少