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/61849154/

    相关文章:

    java - 如何在没有 root 的情况下可靠地模拟 Android 上的触摸事件(如 Automate 和 Tasker)?

    Java 8 替代 Map.entry() 将值映射到新 Map?

    java - 如何使用 Spring MVC 更新我当前的用户数据?

    intellij-idea - 如何在 2019.3 中删除我的 IntelliJ 许可证?

    Javafx Tableview保存数据无需回车键

    java - 我添加的库越多,StandardContext Processing 标准容器启动时间越长

    intellij-idea - IntelliJ 中的 JUnit + Cucumber - 查看步骤

    java - 在IntelliJ中编译错误但在eclipse中没有

    JavaFX 默认元素

    java - 读取特殊鼠标按钮