使用JDK 11+运行JavaFX应用程序;

使用JDK 11+运行JavaFX应用程序;,java,javafx,javafx-8,openjfx,Java,Javafx,Javafx 8,Openjfx,如果我了解Oracle的注释,JavaFX将不会从JDK 11开始包含在JDK中,并且只作为OpenJFX提供 作为一名软件开发人员,我必须采取哪些步骤才能让我的JavaFX应用程序使用JDK 11+运行?有什么好的告别吗?OpenJDK是否可通过Gradle获得?JavaFX 11将可从Maven Central获得,因此您可以使用Maven将其作为任何其他常规依赖项包含在项目中: <dependencies> <dependency> <

如果我了解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>
到目前为止(2018年6月),这是工作,但它应该在JDK 11的时候准备好

现在,您可以从下载JavaFX独立SDK的早期版本,正如所宣布的那样

请注意,在任何情况下,您都不需要构建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
/jdk-11.jdk/Contents/Home/bin/javac--module path/javafx-sdk-11/lib/--add modules=javafx.controls-d class/src//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
cd类
/jdk-11.jdk/Contents/Home/bin/java--module path/javafx-sdk-11/lib/--add modules=javafx.controls.JavaFX11

OpenJFX与您的应用程序捆绑 在应用程序中绑定JavaFX库的方法是正确的

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

OpenJXF是一个很好的工具。但是JavaFX技术并没有被定义为一部分。因此,一些供应商选择将OpenJFX与其基于OpenJDK的产品捆绑在一起,而有些供应商则不这样做

目前至少有两家供应商提供了包含OpenJFX的JavaSE实现。这两个都建在屋顶上。两者都将OpenJFX向后移植到Java8

  • Azul系统的ZuluFX。看
  • 贝尔软件公司的LibericaFX。请参见第页的中间部分
下面是我制作的流程图,用于帮助选择Java实现的供应商。注意到捆绑的OpenJFX了吗?在底部分支


您可以使用LibericaJDK而不是OpenJDK。它与JavaFX捆绑在一起,可以为您节省大量配置。
只需下载“完整JDK”。

只需安装openjfx。在这种情况下,“安装”是什么意思?我需要将OpenJFX与我的应用程序一起发布吗?是的,它必须。同样,您也依赖于JRE。无论您是手动安装JRE(和OJFX),还是自定义JRE(使用jlink构建),您都可以自己判断。到目前为止,我只需要告诉用户安装JDK或JRE。此外,Java通常已经安装在几乎所有的机器上。所以现在当我想从JDK11开始使用JavaFX时,我需要用户进行另一个困难的依赖于平台的安装?这是一个倒退。本机库可以以独立于平台的方式更加智能地打包。例如,参见OSHI项目。对甲骨文的一些批评是有道理的。@StefanReich我不同意。Jigsaw允许您将JRE与应用程序捆绑在一起,并且可以在尚未安装JRE的系统上运行。非常感谢您的回答。继续使用JavaFX让人放心!二进制文件将在什么许可证下分发?如果检查二进制文件,每个模块都有许可证文件。到目前为止,它似乎将是GNU通用公共许可证,版本2,类路径例外。我们是否必须始终使用
/jdk-11.jdk/Contents/Home/bin/java--module path/javafx-sdk-11/lib/--add modules=javafx.controls.JavaFX11
运行应用程序?请参阅,这将取决于您使用的构建工具。
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