错误:缺少 JavaFX 运行时组件 - JavaFX 11 和 OpenJDK 11 以及 Eclipse IDE

Posted

技术标签:

【中文标题】错误:缺少 JavaFX 运行时组件 - JavaFX 11 和 OpenJDK 11 以及 Eclipse IDE【英文标题】:Error: JavaFX runtime components are missing - JavaFX 11 and OpenJDK 11 and Eclipse IDE 【发布时间】:2019-09-09 15:15:57 【问题描述】:

我遇到了这个经典问题:Using JavaFX 11 with OpenJDK 11 with Eclipse IDE.

Error: JavaFX runtime components are missing, and are required to run this application

我有 OpenJDK 11.0.2

dell@dell-pc:~$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
dell@dell-pc:~$ 

我也有JavaFX 11 SDK。顺便一提!如果您想知道,我正在使用 Lubuntu Linux 18.10。

然后我将 Eclipse IDE 中 JavaFX 11 SDK 中的 .jar 文件包含到库包中。

然后我将这个库包包含到我的JAdaptiveMPC 项目中。

我的代码语法没有错误,但我仍然无法编译我的项目。

你知道为什么吗?如果我从 Maven 导入所有这些 .jar 文件而不是下载 JavaFX SDK 并将其导入库中,则会出现相同的错误。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Control</groupId>
  <artifactId>JAdaptiveMPC</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx</artifactId>
        <version>13-ea+5</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>13-ea+5</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>13-ea+5</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>13-ea+5</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>13-ea+5</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>13-ea+5</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>13-ea+5</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>13-ea+5</version>
    </dependency>
  </dependencies>
</project>

继续

我已经在Run Configuration添加了这个

然后我尝试运行

仍然有错误。

【问题讨论】:

与IntelliJ IDEA - Error: JavaFX runtime components are missing, and are required to run this application 重复:如果您将项目作为Java 应用程序运行,则还需要添加VM 参数。请参阅openjfx.io/openjfx-docs/#IDE-Eclipse(来自 IDE 的非模块化)。如果您使用 Maven,请参阅 Maven 部分。 我现在已经做到了。仍然错误。我不知道为什么。 @JoséPereda 错误:与 JavaFX "11" 无关,但与 JavaFX 本身和 FXML 无关:您的 FXML 文件路径错误。只需参考资源文件夹的根目录,例如getResources("/se/danielmartensson/controller/gui.fxml")。顺便说一句,发布问题时,代码优先于屏幕截图。 现在它正在工作@JoséPereda 非常好。我知道代码优于屏幕短片,但对于不知道如何解决此问题的初学者来说,屏幕截图比代码更有价值。 Daniel,如果我们不能测试代码,那是完全不可能帮助你的。请不要在未来提供带有代码的图像。 【参考方案1】:

您的问题不是编译项目,而是运行它。 由于您的 main 是在您的 Application-extension 中定义的,因此运行该项目将需要在启动时在您的模块路径中使用 JavaFX。

因此,要么将您的 main 外包到与您的 Application 不同的类中,要么添加带有 VM 参数的 JavaFX 模块:

--module-path="<javafx-root>\lib" --add-modules="javafx.base,javafx.controls,..."

有关更多信息,请参阅this。

【讨论】:

您好!感谢您的回答。但我已经做到了。看看我更新的问题。 @Heretic 抱歉,我已经更仔细地检查了您的帖子。您显然是在调用FXMLLoader.setLocation​(URL),但显然您的资源 (\JAdaptiveMPC...\gui.fxml) 找不到。所以检查你的位置是否正确,Main.class.getResource(...) 没有返回null @Reizo 你能解释一下如何:“添加带有VM参数的JavaFX模块”,正如你在回答中所说的那样。我遇到了同样的问题,并且到目前为止一直没有成功纠正它。谢谢 @TrixietheCat 您必须在使用java 启动程序时传递给定的参数。通常,您的 IDE 会在后台执行此操作,并允许您配置要传递给 VM 的参数。请参阅this 示例或查找如何在 Eclipse/IntelliJ/...中指定 vm 参数...【参考方案2】:

这个问题很老了,但这就是它在 intellij(linux) 中对我的工作方式:

1- 运行-> 编辑配置

2-在VM Options中添加路径:

--module-path yourpath/lib --add-modules javafx.controls,javafx.fxml

【讨论】:

【参考方案3】:

在 Eclipse 中,我从下拉列表中选择了这个 MODULE PATH 选项,它对我有用 - 我不需要 vm agruments。确保将 JavaFx jar 添加到 Dependencies 选项卡下的 ModulePath 中(Eclipse >> 项目 >> 配置)

【讨论】:

【参考方案4】:

我正在研究 Eclipse。对我来说,使用以下 VM 参数运行类是有效的:

-p C:\<your_path>\javafx-sdk-11\lib --add-modules javafx.controls,javafx.base,javafx.fxml,javafx.graphics,javafx.media,javafx.web --add-opens=javafx.graphics/javafx.scene=ALL-UNNAMED --add-exports javafx.base/com.sun.javafx.event=ALL-UNNAMED
-Djava.library.path="C:\<your_path>\javafx-sdk-11\bin"

【讨论】:

以上是关于错误:缺少 JavaFX 运行时组件 - JavaFX 11 和 OpenJDK 11 以及 Eclipse IDE的主要内容,如果未能解决你的问题,请参考以下文章

错误:缺少 JavaFX 运行时组件 - JavaFX 11 和 OpenJDK 11 以及 Eclipse IDE

缺少 JavaFX 运行时组件,即使我的 VM 选项和模块中已经有了它们

jar文件打开及burp打开的问题解决方法

如何在 Java 11 中将 JavaFX 运行时添加到 Eclipse?

运行 JavaFx 媒体应用程序时出现模块错误

Java OpenJDK 中缺少 JavaFX