10

我在 Mac 上运行 java 版本 11.0.2。当我编译一个导入的 java 文件时,javafx.util.pair我得到了一个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 文件。

问题_1:我错过了上面的任何内容吗?

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

4

1 回答 1

8

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

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

下载SDK 后,如果您想运行 JavaFX 11,您将看到您需要按照文档说明进行操作:

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 是模块化的,即使你看到 下的 JavaFX jars path/to/javafx-sdk-11.0.2/lib,JDK 使用一个大文件:/path/to/jdk-11.0.2.jdk/Contents/Home/lib/modules来运行java命令。该文件是在构建 JDK 时创建的,因此向其中添加任何 jar 都不会产生任何影响。

选择

但是,您会在文档中找到将 JavaFX SDK“复制”到 JDK中的正确方法:通过创建新的自定义映像。请参阅链接部分Custom JDK+JavaFX image

您可以使用jlink创建包含部分或全部 JavaFX 模块的运行时映像,而无需附加到给定项目。

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

事实上,像这样的一些发行版已经这样做了。

所以选项是:您使用常规 JDK​​ 和 JavaFX SDK(带有--module-path--add-modules)或者您创建/使用包含 JavaFX 的自定义 JDK。

于 2019-03-14T19:44:25.513 回答