【发布时间】:2020-09-13 07:58:15
【问题描述】:
我刚刚将我的 eclipse 项目从 java 8 更新到 java 11。但是我在这个项目中使用了为 java 8 设计的外部库。我已经成功地将这些库导入到项目类路径中,就像以前一样,但是 eclipse 只是拒绝使用它们。当我尝试导入它们时,它会将其突出显示为错误消息“无法访问类型 bla.bla.Foo”。我还尝试将这些库导入到项目模块路径中,并在 module-info.java 中需要它们,这以某种方式解决了问题,但我仍然不断收到警告 “自动模块 'SomeLib' 的名称不稳定,它来自模块的文件名。” 和 “当我尝试使用这些库中的对象时,客户端可能无法访问模块 SomeLib 中的 Foo 类型,因为缺少'需要传递'” .
注意:我将 OpenJDK 11 与 JavaFX 11 一起使用。
注意:我要导入的库是 https://github.com/PetoPetko/JavaFx-Image-Animation
注意:我也收到 "The type com.sun... is not access" 来自 com.sun... 包的所有内容,但我不确定这是否相关解决这个问题。
【问题讨论】:
-
删除默认包中的
module-info.java文件或了解JPMS。 -
如果我删除模块信息,@howlger JavaFx 将无法工作,因为 JavaFx 适用于 java 11
-
module-info.java是可选的,也适用于 JavaFX(请参阅 documentation for non-modular)。 Java 11 不需要module-info.java文件。如果您的module-info.java文件没有相应的requires语句,或者如果它位于不导出此包的模块的包中,则无法访问一个类。 -
@howlger 我试过你提到的东西,它实际上解决了程序错误!但是,当我尝试使用
--module-path "C:\Program Files\JavaFx\lib" --add-modules javafx.controls,javafx.fxml作为 VM 参数运行应用程序时,它会抛出java.lang.IllegalAccessError: superclass access check failed: class ugp.org.Texture.Texture$1 (in unnamed module @0x7dc46891) cannot access class com.sun.javafx.collections.ObservableListWrapper (in module javafx.base) because module javafx.base does not export com.sun.javafx.collections to unnamed module @0x7dc46891 -
请遵循文档:click here on JavaFX and Eclipse。不要使用
com.sun.*的东西。那是内部的。
标签: eclipse javafx import java-8 openjdk-11