gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:58:59 38 4
gpt4 key购买 nike

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

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com