12

我在使用 JavaFX 时遇到了一些麻烦。我想开始创建应用程序,桌面或移动,至少是一些东西。所以我发现我可以使用 JavaFX 库。但据我了解,它被排除在 JDK 9 之外。我实际上在 Ubuntu 18 上使用 OpenJDK 11(尽管 Eclipse 写道我有 JavaSE 10 环境,这也是我有点困惑的地方)并且我安装了 OpenJFX使用sudo apt install openjfx,我不能让 Eclipse 与 JavaFX 一起工作。

我不确定不将 JDK 8 与包含的 JavaFX 一起使用是否有任何意义,但无论如何,我如何在 Eclipse 中的这种情况下使用 JavaFX?

4

3 回答 3

20

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

但据我了解,它(JavaFX)被排除在 JDK 9 之外。

JavaFX 将从 JDK 11 开始与Oracle JDK分离。我强调 Oracle JDK,因为 JavaFX 从来都不是 OpenJDK 的一部分。甚至在 OpenJDK 8 中也没有。

我实际上在 Ubuntu 18 上使用 OpenJDK 11(虽然 eclipse 写我有 JavaSE 10 环境,但这也是我有点困惑的地方)

对于 Eclipse 中的 Java 11 支持,您需要安装 Java 11 Support for Eclipse Photon插件。

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

我使用安装了 openjfx sudo apt install 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 11 SDK 中的 JavaFX jar 添加到项目的模块路径中。

在此处输入图像描述

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

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

运行程序\o/

非模块项目

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

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

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

运行程序\o/

于 2018-08-25T09:40:50.327 回答
7

tl;博士

要最轻松地开始使用 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 捆绑在一起。看:

因此,如果使用 Java 8,现在开始 JavaFX 开发将是最容易的。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

于 2018-08-25T03:57:39.377 回答
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 结婚和/或只是想学习(或者是一个没有帮助的教授/助教的学生),BlueJ 目前已经内置了 JavaFX 并且可以使用,因此不需要额外的设置或下载。整洁的!

于 2019-05-19T20:12:37.843 回答