23

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

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

4

3 回答 3

20

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

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

或摇篮:

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

到目前为止(2018 年 6 月),这项工作正在进行中,但应该在 JDK 11发布时准备就绪。

现在,您可以从这里下载 JavaFX 独立 SDK 的早期版本,正如最近宣布的(2018 年 5 月) 。

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

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

您可以使用可从此处获取的 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 11

于 2018-06-13T09:37:42.563 回答
3

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

José Pereda的答案关于在您的应用程序中捆绑 JavaFX 库是正确的。

OpenJFX 与 Java 捆绑在一起

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

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

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

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

在此处输入图像描述

于 2020-12-14T00:38:05.247 回答
1

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

于 2021-03-25T07:30:17.057 回答