如何在Eclipse中为JavaFX类启用自动导入?

如何在Eclipse中为JavaFX类启用自动导入?,java,eclipse,javafx,java-9,javafx-9,Java,Eclipse,Javafx,Java 9,Javafx 9,我当前的Eclipse是Oxygen.2版本(4.7.2),还有Java9.0.1。基本上Java 9可以工作,尤其是自动导入(对于“普通”类和包),但是自动导入(和自动完成)不适用于javafx.*。如果我手动键入importjava并按Ctrl+Space,则会弹出匹配包的列表,在那里我可以看到javafx.*层次结构。但当我键入例如导入javafx.stage并按Ctrl+Space时,它会自动添加*并且不显示包中的任何类。当我在方法体的某个地方键入Stage并按Ctrl+Space时,没

我当前的Eclipse是Oxygen.2版本(4.7.2),还有Java9.0.1。基本上Java 9可以工作,尤其是自动导入(对于“普通”类和包),但是自动导入(和自动完成)不适用于
javafx.*
。如果我手动键入
importjava
并按Ctrl+Space,则会弹出匹配包的列表,在那里我可以看到
javafx.*
层次结构。但当我键入例如导入javafx.stage并按Ctrl+Space时,它会自动添加
*并且不显示包中的任何类。当我在方法体的某个地方键入
Stage
并按Ctrl+Space时,没有对它的建议。但是,当我键入add导入时(如
import javafx.stage.stage
),代码将编译并运行


任何关于如何修复自动完成和自动导入功能的线索(正如我所说,它适用于其他类,例如
java.time.LocalDateTime
或许多其他类)。

javafx*
类在代码完成期间被阻止,因为访问规则管理对系统包的访问。例如,查看动态计算可访问包列表的机制在Eclipse中尚未最终确定。因此,只能使用。该文件目前提到:

注意:JavaSE-9配置文件尚未最终确定

由于根据的动态计算包括
javafx
包(如果可用),我认为静态概要文件也应该列出这些包,或者放弃,只支持完全依赖JPMS规则

但是,您可以通过显式定义一个访问规则来避免该问题,该规则授予对
javafx/**
的访问权


Java构建路径>库>JRE系统库>访问规则

对我来说很好。可能会发生以下几件事:1。您是否将项目配置为模块化项目(即项目中是否有
module info.java
文件)?如果是这样,您需要确保在其中包含适当的JavaFX模块(通常
需要JavaFX.controls;
)。2.您正在使用哪个JDK?JavaFX包含在Oracle JDK中,但不包含在OpenJDK中。Ad.1)不,它不是模块化项目,Ad.2)它是Oracle的。我甚至在Java构建路径/Libraries/Modulepath/JRE系统库[JavaSE-9]中看到了javafx的显式模块,例如javafx.graphics、javafx.base、javafx.swing等等。正如我所说的,代码(在Eclipse中)使用JavaFX运行,只是导入没有完成(并且可以看到包,只是没有看到类)。这太奇怪了……我刚刚注意到,当Eclipse为没有导入的类(例如,
ObservableList
)提供快速修复时,它提供了导入操作,并且实际上添加了import语句!我的意思是通过Ctrl+Space,它就是不能以“通常的方式”工作。该死,真疼!;-)是啊,真奇怪。正如我所说,在相同的设置下,它对我来说“正常”工作。如果打开项目属性、Java构建路径、库,并展开Modulepath和JRE系统库,您是否看到JavaFX模块?是的,我可以看到它们,正如我所说:我甚至在Java构建路径/库/Modulepath/JRE系统库[JavaSE-9]中看到JavaFX的显式模块,例如JavaFX.graphics、JavaFX.base、JavaFX.swing等等。如果他们不在那里,我可能会责怪它。。。但是他们在那里。。。代码运行(好吧,但这些是单独的设置…)。只是不知道有什么问题。有趣的是,当您键入
import java
然后按Ctrl空格键时,javafx包本身就在列表中,其中|表示光标位置。您可以看到包(而不是其中的类)。访问规则是我在Java8中使用的东西。(顺便说一句:在Eclipse中使用JRE的方式有所不同。由于您描述的原因,概要文件没有看到javafx类,但直接指向现成的给定JRE,AFAIR)。