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