我在让 IntellJ 识别 JavaFX 包时遇到问题。对于使用 OpenJDK 11 的新 JavaFX 项目,在尝试构建该项目时,IntelliJ 无法识别 JavaFX 包。
我已从 Maven 存储库导入 openjfx:javafx-base-11
。
我查看了其他问题,解决方案似乎包括检查字节码是否处于正确级别(我的是)以及项目语言是否正确(我的是)。
大家有什么想法吗?
编辑:
错误:
最佳答案
正如评论中提到的,Starting Guide是开始了解 Java 11 和 JavaFX 11 的地方。
像 Java 11 之前那样工作的关键是要理解:
- JavaFX 11 不再是 JDK 的一部分
- 您可以以不同的方式获取它,无论是作为 SDK 还是作为 常规依赖项(maven/gradle)。
- 您需要将其包含到项目的模块路径中,即使您的项目不是模块化的。
JavaFX 项目
如果您在 IntelliJ 中创建常规 JavaFX 默认项目(没有 Maven 或 Gradle),我建议您从 here 下载 SDK 。请注意,也有 jmod,但对于非模块化项目,首选 SDK。
以下是运行默认项目的简单步骤:
- 创建 JavaFX 项目
- 设置 JDK 11(指向您本地的 Java 11 版本)
- 将 JavaFX 11 SDK 添加为库。 URL 可能类似于
/Users/<user>/Downloads/javafx-sdk-11/lib/
。执行此操作后,您会注意到 JavaFX 类现在可以在编辑器中识别。
在运行默认项目之前,您只需将以下内容添加到虚拟机选项中:
--module-path /Users/<user>/Downloads/javafx-sdk-11/lib --add-modules=javafx.controls,javafx.fxml
运行
Maven
如果您使用 Maven 构建项目,请按照以下步骤操作:
- 使用 JavaFX 原型(prototype)创建 Maven 项目
- 设置 JDK 11(指向您本地的 Java 11 版本)
添加 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 类现在可以在编辑器中识别。
您会注意到 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 的示例项目:
不带 Maven/Gradle 的 JavaFX 11,请参阅 non-modular sample或modular sample项目。
带有 Maven 的 JavaFX 11,请参阅 non-modular sample或modular sample项目。
带有 Gradle 的 JavaFX 11,请参阅 non-modular sample或modular sample项目。
关于java - IntelliJ 无法使用 OpenJDK 11 识别 JavaFX 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61849154/