使用 JDK 11+ 运行 JavaFX 应用程序与您的应用程序捆绑在一起的 OpenJFXOpenJFX 与 Java 捆绑在一起
如果我理解Oracle的公告,JavaFX将不会从JDK 11开始包含在JDK中,并且只能作为OpenJFX提供。
作为软件开发人员,我必须采取哪些步骤才能允许我的 JavaFX 应用程序与 JDK 11+ 一起运行?有什么好的吗?OpenJDK会通过Gradle提供吗?
如果我理解Oracle的公告,JavaFX将不会从JDK 11开始包含在JDK中,并且只能作为OpenJFX提供。
作为软件开发人员,我必须采取哪些步骤才能允许我的 JavaFX 应用程序与 JDK 11+ 一起运行?有什么好的吗?OpenJDK会通过Gradle提供吗?
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.jar
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
José Pereda的答案关于在应用程序中捆绑JavaFX库是正确的。
另一种方法是让用户在其计算机上安装了包含 OpenJFX (JavaFX) 库的 Java 实现。对于广泛分发给公众的应用,这种方法可能行不通。但对于受控环境(如企业或机构)中的应用,这可能是有益的。
OpenJXF是OpenJDK项目的一个子项目。但是JavaFX技术并没有被定义为Java SE的一部分。因此,一些供应商选择将OpenJFX与基于OpenJDK的产品捆绑在一起,而有些供应商则不这样做。
目前至少有两家供应商发布了包含OpenJFX的Java SE实现。两者都建立在OpenJDK之上。两者都将OpenJFX向后移植到Java 8。
这是我制作的流程图,以帮助选择Java实现的供应商。请注意底部的 OpenJFX 捆绑?分支。