javafx.base读取包javafx.beans

时间:2018-11-09 19:30:13

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

我将IntelliJ IDEA中的带有Gradle的OpenJDK 11和OpenJFX 11.0.1用于我的项目。 当我使用javafx.base模块时,IntelliJ IDEA在第1行(项目模块声明)报告了一个错误,指出我的模块需求中未包含javafx.beans模块(beans是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不再包含OpenJFX。

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

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

1 个答案:

答案 0 :(得分:0)

通过@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。它们本来应该分开的。