使用 JDK 11+ 运行 JavaFX 应用程序与您的应用程序捆绑在一起的 OpenJFXOpenJFX 与 Java 捆绑在一起

2022-09-01 23:28:55

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

作为软件开发人员,我必须采取哪些步骤才能允许我的 JavaFX 应用程序与 JDK 11+ 一起运行?有什么好的吗?OpenJDK会通过Gradle提供吗?


答案 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 月),这项工作正在进行中,但在 JDK 11 发布时应该已经准备就绪。

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

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

你会发现一堆带有不同模块(如 或 )的 jar,以及您的平台所需的本机库。javafx.base.jarjavafx.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


答案 2

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

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

OpenJFX 与 Java 捆绑在一起

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

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

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

这是我制作的流程图,以帮助选择Java实现的供应商。请注意底部的 OpenJFX 捆绑?分支。

enter image description here


推荐