在JDK 11+中运行JavaFX应用程序

23

如果我理解得没错的话,从JDK 11开始,Oracle宣布JavaFX将不再包含在JDK中,只能作为OpenJFX使用。

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


只需安装OpenJFX即可。 - mr mcwolf
在这个上下文中,“安装”是什么意思?我需要将OpenJFX与我的应用程序一起发布吗? - Hannes
是的,它必须这样。就像您依赖JRE一样。无论您选择进行JRE(和OJFX)手动安装还是自定义JRE(使用jlink构建),都由您自己判断。 - mr mcwolf
2
到目前为止,我只需要告诉用户安装JDK或JRE。此外,Java通常已经安装在任何计算机上。现在,当我想要使用从JDK 11开始的JavaFX时,我需要让用户进行另一个困难的平台相关安装吗?这是一个倒退的步骤。本地库可以以更智能和平台无关的方式打包。例如,请参见OSHI项目。对Oracle的一些批评是必要的。 - Stefan Reich
1
@StefanReich 我不同意。Jigsaw允许您将JRE与应用程序捆绑在一起,并且可以在尚未安装JRE的系统上运行。 - Hannes
3个回答

20

JavaFX 11将可从Maven Central获取,因此您可以像使用其他常规依赖项一样使用Maven将其包含在您的项目中:

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


非常感谢你的回答。继续使用JavaFX让人放心!二进制文件将在什么许可证下分发? - Hannes
如果您查看二进制文件,每个模块都有许可证文件。到目前为止,它似乎将是具有Classpath Exception的GNU通用公共许可证第2版。 - José Pereda
1
我们是否必须始终使用<path.to>/jdk-11.jdk/Contents/Home/bin/java --module-path <path.to>/javafx-sdk-11/lib/ --add-modules=javafx.controls <package.name>.JavaFX11来运行应用程序? - krentm
请查看入门指南,具体步骤将取决于您使用的构建工具。 - José Pereda

3

将OpenJFX捆绑到应用程序中

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

将OpenJFX与Java捆绑

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

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

目前至少有两个供应商使用包含OpenJFX的Java SE实现。它们都建立在OpenJDK之上。两者都将OpenJFX向后移植到Java 8。

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

enter image description here


2

让我先试试这个……我也卡在NetBeans JavaFX的配置上了……! - gumuruh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接