【问题标题】:How to run compiled Java 8 JavaFX application jar using Java 11?如何使用 Java 11 运行已编译的 Java 8 JavaFX 应用程序 jar?
【发布时间】:2021-02-09 05:13:46
【问题描述】:

我有一个用 Java 8 编译的可执行 jar 文件,其中包含一个名为 app.jar 的 JavaFX 应用程序。

当我安装了 Java 8 后,我可以简单地使用 java -jar app.jar 运行它。

现在我只安装了 Java 11,运行上面的命令会产生以下错误:

Error: Could not find or load main class <...>
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

因为 Java 11 不再包含 JavaFX。

所以我考虑安装 JavaFX。 openjfx.org 以两种形式提供 JavaFx:SDK 和 JMOD 文件。

我认为我不需要 SDK,因为我不是在创建 JavaFX,而只是在运行一个。这将 JMOD 文件作为剩余选项。

但是,the Oracle documentation on JMODs 说:“JMOD 文件格式让您可以聚合 .class 文件、元数据和资源以外的文件。这种格式是可传输的,但不可执行,这意味着您可以在编译时或链接期间使用它time 但不是在运行时,”所以它们似乎不会帮助我运行应用程序。

问题:

  • 如何使用 Java 11 运行时运行上述定义的 app.jar
  • 是否有任何文档说明如何执行此操作,如果有,在哪里执行?

【问题讨论】:

  • @Sedrick 你可以。他们专门创建了“未命名模块”的概念,以允许预模块/非模块化代码在 Java 9+ 上运行。
  • JMOD 文件仅用于编译时和链接时(即jlink);你不能在运行时使用它们。您要么需要 SDK,要么下载包含 JavaFX 的 JRE 发行版(那里有几个)。如果您选择后者,那么 JavaFX 应用程序的运行方式与以前相同。如果您选择前者,那么您将需要java --module-path &lt;PATH_TO_SDK&gt; -jar app.jar 之类的非模块化应用程序。请注意,如果您创建运行时映像 (jlink),那么您将希望使用 JMOD 文件,因为它们比 Maven Central 的 JAR 更好地处理本机代码。
  • 正如 Slaw 所指出的,这可能是 Run HelloWorld using JavaFX 加上 how to run a jar file 的步骤,例如如果你从命令行运行一个类文件也是一样的,除了你将-jar添加到java命令并且你需要提供模块(因为它们不在openjfx发行版中)并设置正确的模块路径。
  • 如果可以的话,也可以试试Liberica Java distribution。我认为 Liberica 包含开箱即用的 JavaFX,因此您的 jar 可能会在其上运行,而无需单独提供 JavaFX 模块并为其添加路径。看起来 Liberica 是一个 JDK,而不是 JRE,所以它不是每个人的正确解决方案。
  • 抱歉,我在给出的命令行示例中遗漏了一些内容。它实际上应该看起来像这样:java --module-path &lt;PATH_TO_SDK&gt; --add-modules &lt;FX_MODS&gt; -jar app.jar。其中&lt;PATH_TO_SDK&gt; 是包含JavaFX 模块(JAR 文件)的目录,&lt;FX_MODS&gt; 是应用程序所需的JavaFX 模块(通常至少是javafx.controls,它将隐式引入javafx.graphicsjavafx.base,但也可能包括其他模块,例如javafx.media,其中每个模块名称用逗号分隔)。

标签: java javafx executable-jar java-module


【解决方案1】:

您似乎错过了将 PATH_TO_FX 环境变量添加到您的系统。 You can find a guide on how to do that here:

如果是 Java 8 应用程序,最简单的选择就是 getting Oracle JDK 8 并将其定义为系统环境中的 JDK。

【讨论】:

    猜你喜欢
    • 2019-02-07
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2020-06-19
    • 2019-11-16
    • 2019-04-10
    • 2014-08-31
    • 2011-08-29
    相关资源
    最近更新 更多