软件包javafx.util不存在

LED*_*tom 5 java javafx java-11 javafx-11

我在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:我错过了上面的任何东西吗?

问题_2:如果这种方法是错误的,您会提出什么建议?

Jos*_*eda 7

javafx.util.Pair是javafx.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
Run Code Online (Sandbox Code Playgroud)

这意味着您运行 Java 11 并包含来自 JavaFX SDK 独立位置的模块。请注意,javafx.controls具有作为传递依赖项的javafx.base和javafx.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-path和--add-modules参数(至少在 JavaFX 方面)。

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

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