【问题标题】:Running JavaFX application with JDK 11+使用 JDK 11+ 运行 JavaFX 应用程序
【发布时间】:2018-11-22 13:09:40
【问题描述】:

如果我了解 Oracle 的声明,JavaFX 将不会包含在从 JDK 11 开始的 JDK 中,并且只能作为 OpenJFX 提供。

作为软件开发人员,我必须采取哪些步骤才能让我的 JavaFX 应用程序在 JDK 11+ 上运行?有什么好的建议吗?是否可以通过 Gradle 使用 OpenJDK?

【问题讨论】:

  • 安装openjfx即可。
  • 在这种情况下“安装”是什么意思?我是否还需要将 OpenJFX 与我的应用程序一起发布?
  • 是的,必须的。就像您依赖 JRE 一样。您是手动安装 JRE(和 OJFX)还是自定义 JRE(使用 jlink 构建)由您自己判断。
  • 到目前为止,我只需要告诉用户安装 JDK 或 JRE。此外,Java 通常已经安装在几乎所有的机器上。那么现在当我想从 JDK 11 开始使用 JavaFX 时,我需要用户进行另一个困难的平台相关安装吗?这是一个倒退。本机库可以更智能地以独立于平台的方式打包。参见例如OSHI 项目。对甲骨文的一些批评是有道理的。
  • @StefanReich 我不同意。 Jigsaw 允许您将 JRE 与您的应用程序捆绑在一起,它可以在尚未安装 JRE 的系统上运行。

标签: java javafx javafx-8 openjfx


【解决方案1】:

JavaFX 11 可从 Maven Central 获得,因此您可以使用 Maven 将其作为任何其他常规依赖项包含在您的项目中:

<dependencies>
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx.controls</artifactId>
        <version>11.0.0</version>
    </dependency>
</dependencies>

或 Gradle:

dependencies {
    compile 'javafx:javafx.controls:11.0.0'
}

到目前为止(2018 年 6 月),这是在 progress 中工作的,但它应该在 JDK 11 release 时准备就绪。

现在,您可以从 here 下载 JavaFX 独立 SDK 的早期版本,正如 recently (May 2018) 宣布的那样。

请注意,在任何情况下,您都不需要构建 OpenJDK 或 OpenJFX。

您会发现一堆包含 javafx.base.jarjavafx.controls.jar 等不同模块的 jar,以及您平台所需的本机库。

您可以使用可从here 获得的 OpenJDK 10 或 11 EA 构建来测试它们。

示例

如果您有 JavaFX 应用程序类:

public class JavaFX11 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Scene scene = new Scene(new StackPane(new Label("JavaFX 11")), 300, 200);
        stage.setScene(scene);
        stage.show();
    }
}

你可以编译它:

<path.to>/jdk-11.jdk/Contents/Home/bin/javac --module-path <path.to>/javafx-sdk-11/lib/ --add-modules=javafx.controls -d class/ src/<package.name>/JavaFX11.java

并运行它:

cd class
<path.to>/jdk-11.jdk/Contents/Home/bin/java --module-path <path.to>/javafx-sdk-11/lib/ --add-modules=javafx.controls <package.name>.JavaFX11

【讨论】:

  • 非常感谢您的回答。继续使用 JavaFX 令人放心!二进制文件将根据什么许可证分发?
  • 如果您检查二进制文件,每个模块都有许可证文件。到目前为止,它似乎是带有类路径异常的 GNU 通用公共许可证第 2 版。
  • 我们是否必须始终使用&lt;path.to&gt;/jdk-11.jdk/Contents/Home/bin/java --module-path &lt;path.to&gt;/javafx-sdk-11/lib/ --add-modules=javafx.controls &lt;package.name&gt;.JavaFX11 运行应用程序?
  • 查看getting started guide,这取决于您使用的构建工具。
【解决方案2】:

OpenJFX 与您的应用程序捆绑在一起

Answer by José Pereda 关于在您的应用中捆绑 JavaFX 库是正确的。

OpenJFX 与 Java 捆绑

另一种方法是让您的用户在他们的机器上安装 Java 实现,其中包括 OpenJFX (JavaFX) 库。对于广泛分发给公众的应用程序,这种方法可能不可行。但对于企业或机构等受控环境中的应用,这可能是有益的。

OpenJXF 是一个sub-project on the OpenJDK project。但JavaFX 技术并未定义为Java SE 的一部分。因此,一些供应商选择将 OpenJFX 与其基于 OpenJDK 的产品捆绑在一起,而另一些则没有。

目前至少有两家供应商发布了包含 OpenJFX 的 Java SE 实现。两者都建立在OpenJDK 之上。两者都将 OpenJFX 反向移植到 Java 8。

这是我为帮助选择 Java 实现的供应商而制作的流程图。注意底部的 OpenJFX bundled? 分支。

【讨论】:

    【解决方案3】:

    您可以使用 LibericaJDK 代替 OpenJDK。它与 JavaFX 捆绑在一起,可以为您节省大量配置。 https://bell-sw.com/pages/downloads/#/java-11-lts 只需要下载“Full JDK”即可。

    【讨论】:

      猜你喜欢
      • 2023-02-26
      • 2018-12-30
      • 2019-11-21
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2020-05-28
      相关资源
      最近更新 更多