如何在Eclipse中使用JavaFX 11?

12

我在使用JavaFX时遇到了一些问题,我想开始创建应用程序,无论是桌面还是移动设备,至少做点什么。所以我发现可以使用JavaFX库来实现。但据我所知,它已被从JDK 9中排除。我实际上正在Ubuntu 18上使用OpenJDK 11(虽然Eclipse写道我拥有JavaSE 10环境,这也让我有些困惑),并使用sudo apt install openjfx安装了OpenJFX,但我无法使Eclipse与JavaFX配合工作。

我不确定是否有任何意义不使用包含JavaFX的JDK 8,但无论如何,在此情况下我该如何在Eclipse中使用JavaFX?


1
我不知道JDK 9,但我正在使用JDK 10,它有JavaFX。 - 0xCursor
只是一个问题。你为什么使用Java 11?我问这个问题是因为我仍在使用Java 8,因为我认为Java 10+还处于测试阶段。 - Sam Orozco
1
@SamOrozco Java 10是最新版本,Java 11将于下个月发布。自Java 9发布以来,Oracle按照6个月的发布周期发布新的主要版本。不过,Java 8是当前的LTS版本。https://en.wikipedia.org/wiki/Java_version_history - FThompson
Java 8之后的下一个LTS版本是Java 11。如果您自Java 8以来没有升级,现在是个好时机 ;) - ItachiUchiha
3个回答

20

您的帖子中有多个需要澄清的点。我将尝试用不同的要点回答:

但据我所知,JavaFX已从JDK 9中排除。

从JDK 11开始,JavaFX将从Oracle JDK中分离出来。我强调Oracle JDK是因为JavaFX从未成为OpenJDK的一部分。即使在OpenJDK 8中也不是。

实际上我正在Ubuntu 18上使用OpenJDK 11(虽然eclipse写着我有JavaSE 10环境,这也让我有点困惑)

为了在Eclipse中支持Java 11,请安装 Eclipse Photon的Java 11支持插件。

以下是一些有关如何在Eclipse中运行Java 11应用程序的示例

我使用sudo apt install openjfx安装了openjfx,但我无法让eclipse与JavaFX一起工作。

我不确定不使用包括JavaFX的JDK 8是否有意义,但无论如何,在这种情况下如何在eclipse中使用JavaFX?

由于OpenJDK 11或Oracle JDK 11将不会捆绑JavaFX,你最好是从这里这里下载JavaFX SDK并在你的IDE中加载它们。

如果您习惯构建工具,则可以直接使用Maven Central中可用的JavaFX运行时jar

有关如何在OpenJDK 11上运行JavaFX 11的教程,请参考:

JavaFX 11和Eclipse

撰写本文时,您需要Eclipse 4.9M3才能使用JavaFX 11。

有了eclipse、JDK 11和JavaFX 11 SDK,您可以选择创建:

  • 基于模块的项目
  • 非模块化项目(不需要module-info.java

基于模块的项目

创建一个Java项目,并将JavaFX jars从Java FX 11 SDK添加到项目的模块路径中。

enter image description here

创建一个module.info并声明其依赖于javafx.controls模块。javafx11是包含您的Java文件的包的名称。

module javafx11 {
    requires javafx.controls;
    exports javafx11;
}

运行程序 \o/

非模块化项目

创建一个Java项目,并将JavaFX 11 SDK的Jars添加到项目的模块路径或类路径之一。

将以下JVM参数添加到项目的运行配置中:

--module-path=path-to-javafx-skd/lib --add-modules=javafx.controls

运行程序 \o/


说实话,我在这个领域还是个初学者,所以我并不习惯构建工具。但是,通过你的教程,我确实成功地使用了<code>java</code>控制台命令来使用javafx :D。然而,我没有成功让eclipse看到javafx模块。你能给我一些建议吗? - Alex Chashin
我成功地将javafx.controls.jar文件添加到我的项目库中,但我不明白如何使用它,因为当我导入某些内容时,eclipse会显示“无法解析名称...”。 - Alex Chashin
由于您不想使用Maven,我希望您已经下载了JavaFX SDK。您需要将JavaFX SDK/lib中的所有jar文件添加到Eclipse库中,如此处所示。我已经更新了答案,并提供了Eclipse运行Java 11应用程序的示例 - ItachiUchiha
我仍然无法弄清如何在Eclipse中添加它,下载了Java FX 11 SDK,然后如何将其添加到类路径中?添加库->然后是JavaFX库?它不起作用...请为非模块化项目添加一些图片。 - GOXR3PLUS
我似乎在某个地方读到过,Oracle确实将JavaFX项目“移交”给了OpenJDK。此外,我还发现了这个网站https://wiki.openjdk.java.net/display/OpenJFX。并不是想表现聪明,只是想理解,作为一个初学者,我也会被Java生态系统搞糊涂。 - brat
OpenJFX仍然是OpenJDK的一部分。各种OpenJDK二进制文件只是没有捆绑它。因此,它需要作为单独的SDK / jars下载,并需要添加到模块路径中。 - ItachiUchiha

7

简短概述

为了更轻松地开始使用JavaFX,请使用Oracle品牌的Java 8版本,其中JavaFX 8已经捆绑并且可以轻松获取。

有关技术细节,请参阅在JRE 8中使用JavaFX。请查看网页的链接相关部分以获取许多相关文章。

Java模块化

Java平台正在进行一项全面的重组,即所谓的模块化

以前,Java SE(标准版)是一个庞大的软件单体,不断增长并添加更多内容。没有任何一个应用程序会使用它的所有功能。

一项决定是将Java SE分解为许多单独的块,正式定义为“模块”。一个主要的好处是,应用程序可以与仅由实际需要的模块组成的Java SE运行时捆绑在一起,未使用的模块被省略。请参见jlink工具。
作为这种模块化的副产品,一些较旧且不太受欢迎的部分,例如CORBA,正在被删除,不再作为Java的标准部分(尽管如果其他方面决定接手,则提供)。同样,一些Java EE相关的模块将从Java SE中移除,并转交给Jakarta EE项目,逻辑上更合适的家。请参见JEP 320:删除Java EE和CORBA模块

模块化和重组的过程是一个长达多年的持续努力。在Java 9和Java 10中已经完成了很多工作。其中一些最后的步骤正在Java 11中进行。

Java 11正在采取的其中一步是停止将JavaFX与Java SE捆绑在一起。请参见:

如果您现在开始使用JavaFX进行开发,最好使用Java 8。JavaFX库与Java 8捆绑在一起。您不需要了解模块化,也不需要为了识别模块而拼命调整IDE(例如Eclipse)和项目设置。如果您没有迫切需要使用最新版本的Java或JavaFX,请坚持使用8,直到模块化过程和工具得到平稳处理,可能是明年2019年。
如果您坚持使用Java 11,您需要了解以下内容:
- 通常的Java模块化,包括module-info.java文件。 - 更新您的IDE(Eclipse等)和其他支持模块化和Java 11的工具的版本。 - 配置构建工具中的模块,如Maven或Gradle。 - 配置IDE中的模块,如Eclipse。 - 下载JavaFX模块,或者使用依赖管理器(如Maven)来完成这项工作。

这些点在这里涵盖太多,而且已经在Stack Overflow的许多其他问题中涵盖过了。此外,Java 11 尚未正式发布。

也许这篇文章会有所帮助,如何在JDK 11上创建JavaFX项目

要了解更多关于Java模块化的知识,请阅读博客和Nicolai Parlog的书The Java Module System


非常感谢,我对所有这些都感到非常困惑,可能在英文资源上没有搜索足够(我来自俄罗斯,俄语资源很糟糕)。 - Alex Chashin
如果你开始使用JavaFX,不建议使用Java 8。JavaFX已经得到了许多改进和错误修复,这些改进和修复在Java 8中是不可用的(没有被回溯)。 - rli
ZuluFX 看起来是一个不错的资源,但目前还没有更新到 JavaFX 12。他们目前提供的是 JavaFX 版本 8 和 11。 - Basil Bourque

1

我现在已经在大约20台电脑上进行了这项工作,因此我制作了以下清单:

[ ] download javafx11 from javafx11's website, put on desktop
[ ] create a MODULE based project
[ ] right click project, go to BUILD PATH
[ ] add the downloaded javafx.base/control/graphics as external jar files
[ ] put the files in a package (eg: my_big_package)
[ ] put the following in the module.java file:
module javafx11 {
    requires javafx.controls;
    exports my_big_package;
}
[ ] eat a donut from the break room

如果您没有对Eclipse有依赖,或者只是想学习Java编程(或者是遇到了不太友好的教授/助教),BlueJ已经内置了JavaFX并且可以直接使用,无需额外的设置或下载。很方便!

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