包 javafx.util 不存在

package javafx.util does not exist

我 运行 java Mac 上的版本 11.0.2。当我编译一个导入 javafx.util.pair 的 java 文件时,我得到了一个 error: package javafx.util does not exist。解决这个问题的有用资源不多。我在网上尝试了不同的建议,但没有成功。目前我正在尝试将 JavaFX 包添加到我的 Java 目录中。但是没用。

这是我所做的:

  1. 已下载 javafx-sdk-11.0.2 文件夹。在文件夹内,有 2 个目录 - legal 和 lib

  2. 已将 legal 目录中的项目移动到 /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/legal

  3. lib 目录中的项目移动到 /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib

  4. 重新打开终端编译此 .java 文件。

Question_1:我是不是漏掉了上面的内容?

Question_2:如果这个方法是错误的,你有什么建议?

javafx.util.Pairjavafx.base module 的一部分,正如您所提到的,您需要将 JavaFX SDK 下载到您的机器上,因为它是不再是 Java JDK 的一部分。

您可以按照 OpenJFX docs 了解如何开始。

一旦你有 downloaded the SDK, if you want to run JavaFX 11, you will see that you need to do something as documented:

export PATH_TO_FX=path/to/javafx-sdk-11.0.2/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX

这意味着您 运行 您的 Java 11 并包含来自 JavaFX SDK 独立位置的模块。请注意,javafx.controls 具有作为传递依赖项的 javafx.basejavafx.graphics 模块。

但是,您不会在那些文档中读到必须将 JavaFX 文件复制到 JDK 中。那不行。

它不起作用的主要原因:Java 11 和 JavaFX 11 是模块化的,即使您在 [=16= 下看到 JavaFX jar ],JDK使用大文件:/path/to/jdk-11.0.2.jdk/Contents/Home/lib/modules到运行java命令。该文件是在构建 JDK 时创建的,因此向其添加任何 jar 都不会产生任何影响。

备选

但是,您会在文档中找到 正确 将 "copy" JavaFX SDK JDK 的方法:通过创建一个新的自定义图像。请参阅 link,部分 Custom JDK+JavaFX image

You can use jlink to create a runtime image that includes some or all the JavaFX modules, without being attached to a given project.

因此您可以创建组合图像 Java11+JavaFX11,并将其用作新的 JDK。这将允许您摆脱 --module-path--add-modules 参数(至少在 JavaFX 方面)。

事实上,this one 等一些发行版已经这样做了。

因此选项是:您使用常规 JDK 和 JavaFX SDK(使用 --module-path--add-modules)或者您 create/use包含 JavaFX.

的自定义 JDK