软件包javafx.util不存在

时间:2019-03-14 19:24:04

标签: java javafx java-11 javafx-11

我正在Mac上运行Java版本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文件。

问题_1:我是否想念以上任何内容?

问题_2:如果这种方法不对,您会提出什么建议?

1 个答案:

答案 0 :(得分:2)

javafx.util.Pairjavafx.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.basejavafx.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中。请参见linkCustom JDK+JavaFX image部分。

  

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

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

实际上,像this one这样的某些发行版已经做到了。

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