如果我了解 Oracle 的声明,JavaFX 将不会包含在从 JDK 11 开始的 JDK 中,并且只能作为 OpenJFX 提供。
作为软件开发人员,我必须采取哪些步骤才能让我的 JavaFX 应用程序在 JDK 11+ 上运行?有什么好的建议吗?将通过 Gradle 提供 OpenJDK 吗?
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.jar
or 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 了吗?底部的分支。
您可以使用 LibericaJDK 而不是 OpenJDK。它与 JavaFX 捆绑在一起,可以为您节省大量配置。 https://bell-sw.com/pages/downloads/#/java-11-lts 只需要下载“Full JDK”即可。