IntelliJ无法使用OpenJDK 11识别JavaFX 11

问题描述 投票:38回答:3

我无法让IntelliJ识别JavaFX包。使用OpenJDK 11的新JavaFX项目,在尝试构建项目时,IntelliJ无法识别JavaFX包。

我从Maven回购中导入了openjfx:javafx-base-11

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

有人有主意吗?

pic 1

pic 2

pic 3

编辑:

错误:

enter image description here

java intellij-idea javafx java-11 javafx-11
3个回答
77
投票

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

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

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

JavaFX项目

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

这些是运行默认项目的简单步骤:

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

JavaFX 11 Project

  1. 在运行默认项目之前,您只需将这些添加到VM选项: --module-path /Users/<user>/Downloads/javafx-sdk-11/lib --add-modules=javafx.controls,javafx.fxml

Maven的

如果您使用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。

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

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

  1. 将默认maven插件替换为here中的插件。
  2. 运行mvn compile exec:java,它应该工作。

类似的工作也适用于Gradle项目,详见here

编辑

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


2
投票

以上都不适合我。我花了太多时间清理出现的其他错误。我发现这是最简单和最好的方式。

This works for getting JavaFx on Jdk 11, 12 & on OpenJdk12 too!

  • 视频向您显示JavaFx Sdk下载
  • 如何将其设置为全局库
  • 设置module-info.java(我更喜欢底部的)

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

整件事只花了我5分钟!


2
投票

Java FX不再是JDK 11的一部分的问题。以下解决方案使用IntelliJ(尚未尝试使用NetBeans):

  1. 将JavaFX Global Library添加为依赖项: 设置 - >项目结构 - >模块。在模块中转到Dependencies选项卡,然后单击添加“+”符号 - >库 - > Java->从列表中选择JavaFX,然后单击Add Selected,然后单击Apply settings。
  2. 右键单击JavaFX项目中的源文件(src),然后创建一个新的module-info.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

© www.soinside.com 2019 - 2024. All rights reserved.