我正在Mac上运行Java版本11.0.2。我编译了一个导入javafx.util.pair
的java文件时,得到了error: package javafx.util does not exist
。没有太多有用的资源来解决此问题。我在网上尝试了其他建议,但没有白费。目前,我正在尝试将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:如果这种方法不对,您会提出什么建议?
答案 0 :(得分: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都不会产生任何效果。
替代
但是,您会在文档中找到 right 的方法,即通过创建新的自定义映像将JavaFX SDK复制到JDK中。请参见link的Custom JDK+JavaFX image
部分。
您可以使用
jlink
创建一个包含一些或所有JavaFX模块的运行时映像,而无需附加到给定项目。
因此,您可以创建Java11 + JavaFX11的组合图像,并将其用作新的JDK。这将使您摆脱--module-path
和--add-modules
参数(至少就JavaFX而言)。
实际上,像this one这样的某些发行版已经做到了。
因此,选项是:您使用常规JDK和JavaFX SDK(带有--module-path
和--add-modules
),或者创建/使用包含JavaFX的自定义JDK。