java - 如何使用 Java 11 启动 JavaFX 应用程序?

标签 java javafx java-11 javafx-11

假设我安装了 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/

相关文章:

java - 使用准备好的语句从用户输入创建数据库以防止 SQL 注入(inject)

JavaFX - 如何对条形图中的值进行排序

JavaFX : Adapt component height to its children height?

mysql - 如何在Tableview(Javafx)中仅显示mysql表的单列?

java - Lombok @getter 无法在 src/test/java 包中工作

java - 如何通过对 Infinispan 或 Hibernate Search 的 API 调用为单个项目编制索引?

java - 如何设置另一个类的监听器?

java - 在java方法中获取返回语句

Java 11 : Executing Source File via Shebang is not working

java - 在命令提示符下运行 java 代码时出现问题