我在 Mac 上运行 Java 版本 11.0.2。当我编译一个导入 javafx.util.pair
的 java 文件时,我得到了一个错误:包 javafx.util 不存在
。解决这个问题的有用资源不多。我在网上尝试了不同的建议,但没有成功。目前我正在尝试将 JavaFX 包添加到我的 Java 目录中。但它不起作用。
这是我做的:
已下载 javafx-sdk-11.0.2 文件夹。在文件夹内,有 2 个目录 - legal 和 lib
将
legal
目录中的项目移动到/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/legal
将
lib
目录中的项目移动到/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home/lib
重新打开终端以编译此 .java 文件。
问题_1:我是否遗漏了以上内容?
问题_2:如果这种方法是错误的,你有什么建议?
最佳答案
javafx.util.Pair
是 javafx.base
module 的一部分,正如您所提到的,您需要将 JavaFX SDK 下载到您的机器上,因为它不再是 Java JDK 的一部分。
可以关注OpenJFX docs关于如何开始。
一旦你有downloaded SDK,如果你想运行 JavaFX 11,你会看到你需要做一些事情 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.base
和 javafx.graphics
模块。
但是,您不会在那些文档中读到必须将 JavaFX 文件复制到 JDK 中。那是行不通的。
它不起作用的主要原因:Java 11 和 JavaFX 11 是模块化的,即使您在 path/to/javafx-sdk-11.0.2/lib
下看到 JavaFX jar ,JDK使用一个大文件:/path/to/jdk-11.0.2.jdk/Contents/Home/lib/modules
来运行java
命令。该文件是在构建 JDK 时创建的,因此向其中添加任何 jar 都不会产生任何影响。
备选
但是,您会在文档中找到将 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
)或者您创建/使用包含 JavaFX 的自定义 JDK。
关于java - 包 javafx.util 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55170520/