IntelliJ 无法识别带有 OpenJDK 11 的 JavaFX 11

2022-08-31 10:50:43

我在让IntellJ识别JavaFX软件包时遇到问题。使用新的JavaFX项目,使用OpenJDK 11,当尝试构建项目时,IntelliJ无法识别JavaFX包。

我已从 Maven 存储库导入。openjfx:javafx-base-11

我已经研究了其他问题,解决方案似乎包括检查字节码是否在正确的级别(我的是),以及项目语言是否正确(我的是正确的)。

有人有什么想法吗?

pic 1

pic 2

pic 3

编辑:

错误:

enter image description here


答案 1

正如评论中提到的,入门指南是从Java 11和JavaFX 11开始的地方。

像Java 11之前一样工作的关键是要了解:

  • JavaFX 11 不再是 JDK 的一部分
  • 您可以以不同风格获取它,既可以作为 SDK,也可以作为常规依赖项(maven/gradle)。
  • 您需要将其包含在项目的模块路径中,即使您的项目不是模块化的。

JavaFX 项目

如果你在IntelliJ中创建一个常规的JavaFX默认项目(没有Maven或Gradle),我建议你从这里下载SDK。请注意,也有jmods,但对于非模块化项目,SDK是首选。

以下是运行默认项目的简单步骤:

  1. 创建 JavaFX 项目
  2. 设置 JDK 11(指向本地 Java 11 版本)
  3. 将 JavaFX 11 SDK 添加为库。该 URL 可以是类似于 .完成此操作后,您会注意到 JavaFX 类现在已在编辑器中识别出来。/Users/<user>/Downloads/javafx-sdk-11/lib/

JavaFX 11 Project

  1. 在运行默认项目之前,只需将以下内容添加到 VM 选项:

    --module-path /Users/<user>/Downloads/javafx-sdk-11/lib --add-modules=javafx.controls,javafx.fxml

马文

如果使用 Maven 生成项目,请按照下列步骤操作:

  1. 使用 JavaFX 原型创建 Maven 项目
  2. 设置 JDK 11(指向本地 Java 11 版本)
  3. 添加 JavaFX 11 依赖项。

    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>11</version>
        </dependency>
    </dependencies>
    

完成此操作后,您会注意到 JavaFX 类现在已在编辑器中识别出来。

JavaFX 11 Maven project

您会注意到Maven为您管理所需的依赖项:它将为javafx.controls添加javafx.base和javafx.graphics,但最重要的是,它将根据您的平台添加所需的分类器。在我的情况下,Mac。

这就是为什么你的jar是的,因为有三个可能的分类器(windows,linux和mac平台),它们包含所有的类和本机实现。org.openjfx:javafx-controls:11

如果您仍然想转到.m2存储库并手动从那里获取依赖项,请确保选择正确的依赖项(例如.m2/repository/org/openjfx/javafx-controls/11/javafx-controls-11-mac.jar)

  1. 将默认的 maven 插件替换为此处的插件。

  2. 运行 ,它应该可以正常工作。mvn compile javafx:run

类似的工作也适用于Gradle项目,如这里详细解释的那样。

编辑

上面提到的入门指南包含 IntelliJ 的更新文档和示例项目:


答案 2

JavaFX不再是JDK 11的一部分的问题。以下解决方案使用 IntelliJ 工作(尚未在 NetBeans 中尝试过):

  1. 将 JavaFX 全局库添加为依赖项:

    设置 -> 项目结构 -> 模块。在模块中,转到“依赖关系”选项卡,然后单击添加“+”符号 ->库 -> Java->从列表中选择 JavaFX,然后单击“添加所选内容”,然后单击“应用设置”。

  2. 右键单击 JavaFX 项目中的源文件 (src),然后创建一个新的模块信息.java文件。在文件内部写入以下代码:

    module YourProjectName { 
        requires javafx.fxml;
        requires javafx.controls;
        requires javafx.graphics;
        opens sample;
    }
    

    我向你保证,这两个步骤将解决你使用JavaFX的所有问题。

参考:有一个由学习编程频道制作的You Tube教程,将在短短5分钟内解释上述所有细节。我还建议观看它来解决您的问题:https://www.youtube.com/watch?v=WtOgoomDewo


推荐