【问题标题】:How can I start a JavaFX application with Java 11?如何使用 Java 11 启动 JavaFX 应用程序?
【发布时间】:2019-04-10 09:52:56
【问题描述】:

假设我安装了 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(因为现在必须在启动应用程序的命令行中指定它的位置)。

【问题讨论】:

  • jre-11\lib 是否包含 JavaFX SDK jar?是否还包含其他可能不应该成为模块路径一部分的 jar?您是否尝试过将 JavaFX SDK jar 单独放在一个文件夹中?你检查过getting started guide吗?
  • 我不确定您的问题,但如果您已经添加了javafx.controls,则无需通过--add-modules 添加javafx.basejavafx.controls 模块将同时引入 javafx.basejavafx.graphics 模块。
  • 模块jrt.fs 导致模块路径在哪里,如果不存在则缺少哪些类?
  • 何塞,是的,它包含所有的罐子。如果路径上有几个相同的模块,将 jar 移动到不同的文件夹会有什么帮助?
  • nullpointer, jrt.fs 在 JDK 的 lib 文件夹中,它位于模块路径中。很难说缺少哪些类,因为它们似乎有很多——类加载器根本不起作用。我将花一些时间尝试了解所有依赖项。

标签: java javafx java-11 javafx-11


【解决方案1】:

我发现当从 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 在 Path 中,所有 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

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2013-02-04
    • 2021-02-09
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多