使用Java 9和Intellij Idea时,JavaFX不存在。

9
我正在使用Intellij Idea编译一个依赖Maven的项目,但Intellij一直告诉我我的项目有50多个错误,因为JavaFX不存在。
Intellij没有将我代码中所有的JavaFX依赖项都标记为错误,只是当我运行并编译程序时,程序会提示JavaFX中的所有内容都不存在。
我尝试重新下载最新的JDK(Java 9.0.1),但这并没有解决问题。我进入了默认项目结构和项目结构,确保它正在使用正确的jdk,但这也没有解决问题。我使用的所有jdk似乎都将JavaFX包列为已包含在项目中。
这只是我与朋友合作的特定项目的问题。我们可能需要将所有代码移动到一个新项目中,但我不确定这是否会解决任何问题。
有什么建议吗?

你尝试用maven编译它了吗?我自己用IntelliJ编译JavaFX也遇到了一些问题。现在它可以工作了,但我不知道为什么。 - Aram Becker
你使用的是哪个版本的IntelliJ?你收到了什么错误信息? - Naman
6个回答

13

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


1
我遇到了相同的问题,这似乎没有帮助。还有其他的想法吗? - Fuyang Liu

11

好的,我明白我的问题所在。

除了上面提到的尝试将项目语言级别设置为“Project Structure | Project”中的“9”之外,我在某些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


1
那如果我不想以9为目标怎么办?我只是想编译这个项目,使其可以在JDK8和JDK9/10上运行。如果我将其编译为目标9,则无法在1.8上工作。 - Mejmo

6

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

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

请查看 Preferences -> Build, Execution, Deployment -> Compiler -> Java Compiler。检查Project bytecode version未设置(或正确设置),并且您的模块未列在Per-module bytecode version中,并带有不正确的值。


1
File --> Project Structure-->Module

这里的语言级别对我来说设置为了5。将其提升到9以允许使用类等,上述相同的错误问题得到了解决。

1
你有阅读之前的回答和评论吗?你的回答提供了什么新信息? - mipa
实际上帮了很大的忙,因为我找不到项目结构在哪里。 - Jenny

1
我在gradle.build中错过了模块。必须更新。
javafx {
  version = "11"
  modules = [ 'javafx.controls', 'javafx.fxml' ]
}

0
在Java9+中,一些模块不包含在JRE/JDK中。解决方案是显式地添加这些库。
对于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>

然后我可以使用所需的库来包含文本字段。

import javafx.scene.control.TextField;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接