java - IntelliJ 无法使用 OpenJDK 11 识别 JavaFX 11

标签 java intellij-idea javafx java-11 javafx-11

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

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

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

大家有什么想法吗?

pic 1

pic 2

pic 3

编辑:

错误:

enter image description here

最佳答案

正如评论中提到的,Starting Guide是开始了解 Java 11 和 JavaFX 11 的地方。

像 Java 11 之前那样工作的关键是要理解:

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

JavaFX 项目

如果您在 IntelliJ 中创建常规 JavaFX 默认项目(没有 Maven 或 Gradle),我建议您从 here 下载 SDK 。请注意,也有 jmod,但对于非模块化项目,首选 SDK。

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

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

JavaFX 11 Project

  • 在运行默认项目之前,您只需将以下内容添加到虚拟机选项中:

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

  • 运行

  • Maven

    如果您使用 Maven 构建项目,请按照以下步骤操作:

    1. 使用 JavaFX 原型(prototype)创建 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 org.openjfx:javafx-controls:11,因为存在三种可能的分类器(windows、linux 和 mac 平台),其中包含所有类和 native 实现。

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

  • 将默认的 Maven 插件替换为 here 中的插件.

  • 运行mvn compile javafx:run ,它应该可以工作。

  • 类似的方法也适用于 Gradle 项目,详细解释为 here .

    编辑

    上述入门指南包含更新的 documentation以及 IntelliJ 的示例项目:

    关于java - IntelliJ 无法使用 OpenJDK 11 识别 JavaFX 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52888568/

    相关文章:

    java - 帮助化学平衡器? (从数组列表到矩阵的转换)在java中

    java - Intellij - JAVA 错误(导入等...)未检测到

    java - 如何在 IntelliJ IDEA 中创建 .jar 文件或导出 JAR(如 Eclipse Java 存档导出)?

    java - 自定义JavaFX(JDK 8)中的现有控件

    java - 绑定(bind)属性不起作用

    ScalaFX - 如何使用方法获取场景的标题

    java - 将 Shape 的中心与 JPanel 的中心对齐

    java - 部署所有应用程序后启动 Tomcat 的 HTTP/HTTPS 连接器

    scala - 为什么我的 Scala 类对其匹配的测试类不可见?

    java - 如何将数据从一个jsp表单传输到另一个jsp表单