【问题标题】:javafx.base reads package javafx.beansjavafx.base 读取包 javafx.beans
【发布时间】:2019-04-13 09:42:26
【问题描述】:

我在 IntelliJ IDEA 中将 OpenJDK 11 和 OpenJFX 11.0.1 与 Gradle 一起用于我的项目。 当我使用 javafx.base 模块时,IntelliJ IDEA 在第 1 行(项目模块声明)报告错误,说我的模块要求中没有包含 javafx.beans 模块(bean 是 javafx.base 模块中的一个包)。 Gradle jar 任务执行时没有任何错误或警告,因此此错误可能与 IntelliJ IDEA 有关。

错误消息:“模块 'hr.caellian.lunar' 读取 'javafx.base' 和 'javafx.base' 的包 'javafx.beans'” 如果我删除 'javafx.base' 要求,则上述错误中的 'javafx.base' 将替换为下一个 javafx 模块。

我还在 javafx 模块要求行中收到警告:“不明确的模块参考:javafx.base”对于 'javafx.base' 等等每个 javafx 模块。

这是我的 module-info.java 文件:

module hr.caellian.lunar {
    requires java.base;
    requires kotlin.stdlib;

    requires javafx.base;
    requires javafx.controls;
    requires javafx.fxml;
    opens hr.caellian.lunar.gui to javafx.graphics;

    requires org.kordamp.ikonli.javafx;
    requires org.kordamp.iconli.core;

    requires com.fasterxml.jackson.core;
    requires com.fasterxml.jackson.databind;
    requires com.fasterxml.jackson.dataformat.yaml;

    requires arglib;
    requires org.apache.bcel;
}

我在网上找了至少半个小时的解决方案。我发现的只是一个网站,说只有我已经包含的模块是 JFX 所必需的(我认为这是 JavaFX 9)。

我重新下载了 JavaFX 模块以查看我是否错过了复制某些内容,但我没有 - javafx.beans 模块不存在。

如果有问题,'java --list-modules' 不会列出任何 javafx 模块,尽管我认为它应该只列出 jdk 模块并且 OpenJFX 不再包含在 OpenJDK 中。

我将 OpenJFX SDK 安装到 JDK 文件夹中(将 lib 文件复制到 lib 文件夹,合法相同),在 IDEA 中手动添加了来自 JDK11 的 lib 文件夹的 javafx jar 依赖文件。我还将所有 jmod 文件添加到 JDK11 的 jmod 文件夹中。

JavaFX 模块是否可能有错误的 module-info.java 文件或类似的文件?这是 IntelliJ IDEA 错误吗?

【问题讨论】:

  • 您能否复制并粘贴您收到的确切错误消息?
  • 您使用的是 Maven 还是 Gradle?否则,您如何为 IntelliJ 设置 JavaFX SDK?你设置module-path了吗?
  • @JacobG。添加到问题中。
  • @JoséPereda Gradle,将 JFX SDK 安装到 JDK 文件夹中,将 jars 手动添加到 IntelliJ 的 JDK11。我还没有在 gradle 中设置模块路径,不确定是否需要,但这与问题无关,因为 IntelliJ 给出了这个错误,而不是 gradle,gradle jar 任务正确执行而没有错误。
  • @TinSvagelj 我猜,您最终在 JavaFX 的模块路径中放置了两次相同的模块。从段落 I installed OpenJFX SDK into JDK folder... 和错误 Ambiguous module reference:.... 推断这一点

标签: java javafx java-module java-11 openjfx


【解决方案1】:

感谢@nullpointer 的评论,设法解决了问题。

问题是我已将文件从 JavaFX SDK 复制到我的 JDK 11 类路径和项目 lib 文件夹。

如果您看到此错误并带有相同的警告,这意味着您的 IntelliJ 项目 JDK Classpath 和 build.gradle(或 lib 文件夹)中可能有重复的模块 jar(可能直接在未来的模块中)。

如何解决: 我从项目结构中 IntelliJ IDEA 的 JDK11 类路径中删除了 OpenJFX SDK jar。当我从我的项目 lib 文件夹中删除 JFX SDK jar 时,我阅读了它们。 Gradle 将 lib 文件夹中的每个 jar 添加到:

implementation fileTree(dir: 'lib', include: '**/*.jar')

另外,不要将 JavaFX 直接安装到 JDK 文件夹中。如果不保留不必要的文件,就不可能进行更新,如果您想删除它,您将永远无法找到要删除的所有 JFX 文件,JFX src.zip 替换了 lib 文件夹中的 JDK src.zip。它们是分开的。

【讨论】:

  • 另外,一旦我修正了我的错误,我就不再能够使用 class.getResource("path") 来加载资源,因为新模块的工作方式和 gradle 还没有完全支持它们。如果您遇到此问题,请查看 this 问题答案,其中解释了如何在 Gradle 中使用模块和资源。
猜你喜欢
  • 2019-05-02
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多