JavaFX 不存在使用 Java 9 和 Intellij Idea

Posted

技术标签:

【中文标题】JavaFX 不存在使用 Java 9 和 Intellij Idea【英文标题】:JavaFX does not exist using Java 9 and Intellij Idea 【发布时间】:2018-05-02 18:20:51 【问题描述】:

我正在使用 Intellij Idea 编译一个使用 Maven 依赖项的项目,而 Intellij 一直告诉我我的项目有 50 个错误,因为 JavaFX 不存在。

Intellij 没有将我的代码中的所有 javafx 依赖项都突出显示为错误,只是一旦我按下运行并编译程序,就会说 JavaFX 中的所有内容都不存在。

我尝试重新下载最新的 JDK (Java 9.0.1) 并没有解决问题。我进入了默认项目结构和项目结构,以确保它使用了正确的 jdk 并且没有解决问题。我使用的所有 jdks 似乎都列出了项目中包含的 javafx 包。

这也只是我与朋友合作的特定项目的问题。我们可能必须将所有代码移到一个新项目中,但我不确定这是否能解决任何问题。

有什么建议吗?

【问题讨论】:

你试过用maven编译吗?我在 javaFX 和通过 intelliJ 自己编译时遇到了很多问题。它现在有效,但我不知道为什么。 您使用的是什么版本的 IntelliJ?您收到的错误信息是什么? 【参考方案1】:

尝试在“项目结构|项目”中将项目语言级别设置为“9”

【讨论】:

我有同样的问题,这似乎没有帮助。任何其他想法为什么?【参考方案2】:

好的,我明白我的问题是什么了。

除了上面提到的Try to set project language level to "9" in "Project Structure | Project",我在一些pom.xml中有一个maven设置,看起来像这样:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>$maven-compiler-plugin.version</version>
    <configuration>
        <source>$java.version</source>
        <target>$java.version</target>
    </configuration>
</plugin>

并且java.version 在上面某处被定义为1.8。我只需要把它改成9

【讨论】:

如果我不想将 9 作为目标怎么办?我只想编译该项目,以便它可以在 JDK8 和 JDK9/10 上运行。如果我为目标 9 编译它,它将无法在 1.8 上运行。【参考方案3】:

在将 JavaFX 项目从 Java 8 升级到 Java 9 后,我遇到了这个问题。

在检查 IntelliJ 和 Maven pom 中项目和模块的常用语言级别设置后,我发现问题在于该模块被明确设置为在 Java 编译器首选项中生成 Java 8 字节码。

查看Preferences -&gt; Build, Execution, Deployment -&gt; Compiler -&gt; Java Compiler。检查Project bytecode version 是否未设置(或设置正确),并且您的模块未在Per-module bytecode version 中列出且值不正确。

【讨论】:

【参考方案4】:
File --> Project Structure-->Module

这里的语言级别对我来说设置为 5。将其提高到 9 以允许类等,并且为我解决了与上述相同的错误。

【讨论】:

你看前面的答案和cmets了吗?您的回答提供了哪些新信息? 确实有帮助,因为我找不到项目结构的位置【参考方案5】:

我错过了 gradle.build 中的模块。必须更新

javafx 
  version = "11"
  modules = [ 'javafx.controls', 'javafx.fxml' ]

【讨论】:

【参考方案6】:

在 Java9+ 中,一些模块不包含在 JRE/JDK 中。解决方案是显式添加 thore 库。

对于我使用的 Java9 的 maven pom 文件

<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>11</version>
</dependency>

我可以使用所需的库来包含 TextField。

import javafx.scene.control.TextField;

【讨论】:

以上是关于JavaFX 不存在使用 Java 9 和 Intellij Idea的主要内容,如果未能解决你的问题,请参考以下文章

java JavaFX - 在JavaFX TextField中设置提示(提示)int

如何在 Eclipse 中获取 Javafx 9?

生成int列表以在JavaFX中填充ComboBox

了JavaFx JFoenix Java9

Javafx 项目不能用 maven 编译

JavaFX未使用Java 8导入