导入 javafx 无法解析

Posted

技术标签:

【中文标题】导入 javafx 无法解析【英文标题】:The import javafx cannot be resolved 【发布时间】:2015-12-14 07:46:53 【问题描述】:

我今天在我的 Ubuntu Linux 上安装了 Eclipse IDE,然后使用“安装新软件”安装了 JavaFX,当我创建 javafx 项目时,我在 Main.java 中收到以下错误:

无法解析导入 javafx。

所以,我列出了以下目录来搜索“jfxrt.jar”:

ls -l /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext

但我没有找到“jfxrt.jar”。

java -version

输出:

openjdk 版本“1.8.0_45-internal”

OpenJDK 运行时环境(构建 1.8.0_45-internal-b14)

OpenJDK 64 位服务器 VM(内部版本 25.45-b02,混合模式)

【问题讨论】:

AFAIK OpenJDK 不附带 JavaFX。您需要在其上安装 OpenJFX。见wiki.openjdk.java.net/display/OpenJFX/Main 我安装了 JDK 8,JavaFX 也安装了它。谢谢。 【参考方案1】:

以下是在 Ubuntu Linux 上使用 Maven 进行设置的方法:

1) 安装 OpenJFX 包,检查文件放在哪里。

      sudo apt install openjfx
      dpkg-query -L openjfx

您最终可能会得到 JDK 11 的版本。在这种情况下,请安装新的 OpenJDK,或者为 JDK 8 设置 OpenJFX 的版本。

2) 将其作为 system-scoped 依赖项放入您的 Maven 项目中。

请注意,这是一种懒惰且不太好的方式。正确地,您应该像这样安装 jar:

dpkg-query -L openjfx | grep -E '.jar$' | xargs -l -I \
  mvn install:install-file -Dfile="" -DgroupId=javafx \
    -DartifactId=$(echo $JAR | tr '.' '-') -Dversion=1.0 -Dpackaging=jar

然后将其用作普通的compile-scoped 依赖项。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.source.level>1.8</project.source.level>
    <project.target.level>1.8</project.target.level>

    <javafx.dir>/usr/share/openjfx/lib</javafx.dir>
</properties>

<dependencies>

    <!-- JavaFx :
      sudo apt install openjfx
      dpkg-query -L openjfx
    -->
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>$javafx.dir/javafx.base.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>$javafx.dir/javafx.controls.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>$javafx.dir/javafx.fxml.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>$javafx.dir/javafx.graphics.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>$javafx.dir/javafx.media.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>$javafx.dir/javafx.swing.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>javafx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>$javafx.dir/javafx.web.jar</systemPath>
    </dependency>

</dependencies>

【讨论】:

【参考方案2】:

A) 确保您使用的是兼容的 JDK,例如 1.8,并且

B) 在 Eclipse Project Facets 中配置兼容的 Java 版本。

    右键单击Java项目,选择属性 选择Project Facets,找到Java,设置1.8版

对于 Java 11,也会出现此错误,因为 JavaFX 已从 Java 11 中删除并作为独立版本提供

更多信息: https://blogs.oracle.com/java-platform-group/the-future-of-javafx-and-other-java-client-roadmap-updates

【讨论】:

英文 Eclipse 中没有 facets。【参考方案3】:

对于 Java Compiler 8 或更高版本,请执行以下操作:

    右键单击项目 选择构建路径 ----> 添加库

然后您将看到以下屏幕截图:

确保您已经下载并安装了 JDK 8 或更高版本

当您按下完成按钮时,代码中的所有 Java FX 错误都会消失。

注意先决条件:

在 NetBeans 8.0.1 上安装和测试 JDK 9

【讨论】:

【参考方案4】:

根据 Ubuntu Vivid 中的packages list,有一个名为 openjfx 的包。这应该是您正在寻找的候选人:

JavaFX/OpenJFX 8 - Java 的富客户端应用平台

您可以通过以下方式安装它:

sudo apt-get install openjfx

它为 Ubuntu 系统上的 OpenJDK 安装提供 following JAR files:

/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jfxswt.jar
/usr/lib/jvm/java-8-openjdk-amd64/lib/ant-javafx.jar
/usr/lib/jvm/java-8-openjdk-amd64/lib/javafx-mx.jar

希望这会有所帮助。

【讨论】:

为什么必须手动下载包?不是嵌入到jdk里面吗? 不,这些文件是分开分发的。 是的,我找到了。 javafx 与 jdk 分离,因为我认为 jdk11 @Panagiss - 即使是从 8 开始的版本,OpenJDK 也不包含 javafx。

以上是关于导入 javafx 无法解析的主要内容,如果未能解决你的问题,请参考以下文章

某些 JavaFX 导入在 Eclipse 中无法解析

无法使用 Spring Boot 解析 JavaFX 应用程序的占位符

JavaFx SceneBuilder 2.0 无法解析自定义控件

使用 Java SE 8u25 在 Eclipse 中无法解析某些 javafx 类

JavaFX未使用Java 8导入

导入 javax.servlet 无法解析 [重复]