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

17

我有一个经典问题:如何在Eclipse IDE中同时使用JavaFX 11和OpenJDK 11。

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。 enter image description here 然后,我将JavaFX 11 SDK中的.jar文件包含在Eclipse IDE中的库包中。

enter image description here

然后我将这个库包含到我的 JAdaptiveMPC 项目中。 enter image description here 代码语法没有错误,但是我仍然无法编译我的项目。 enter image description here 你知道为什么吗?如果我从 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>

继续

我已经在运行配置中添加了这个。

enter image description here

然后我尝试运行在此输入图片描述,但仍然出现错误。

重复的问题:IntelliJ IDEA - Error: JavaFX runtime components are missing, and are required to run this application。如果您将项目作为Java应用程序运行,则还需要添加VM参数。请参见https://openjfx.io/openjfx-docs/#IDE-Eclipse(从IDE中非模块化)。如果您使用Maven,请查看Maven部分。 - José Pereda
我现在已经做了。还是有错误。我不知道为什么。@JoséPereda - euraad
1
错误:与JavaFX“11”无关,而与JavaFX本身和FXML有关:您的FXML文件路径是错误的。只需引用资源文件夹的根目录,如getResources("/se/danielmartensson/controller/gui.fxml")。另外,在发布问题时,建议使用代码而不是屏幕截图。 - José Pereda
现在它正在工作@JoséPereda非常好。我知道代码比屏幕截图更受欢迎,但对于不知道如何解决此问题的初学者来说,屏幕截图比代码更有价值。 - euraad
Daniel,如果我们无法测试代码,那么帮助你就相当困难。请不要在未来提供带有代码的图像。 - aironman
4个回答

26

你的问题不在于编译项目,而在于运行它。 由于你的mainApplication扩展中被定义,因此运行项目将需要在启动时将JavaFX添加到模块路径中。

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

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

点击此处获取更多信息。


你好!谢谢你的回答。但是我已经做过了。请看我的更新问题。 - euraad
@Heretic 抱歉,我仔细检查了您的帖子。显然,您正在调用 FXMLLoader.setLocation​(URL),但是您的资源(\JAdaptiveMPC...\gui.fxml)似乎找不到。因此,请检查您的位置是否正确,并且 Main.class.getResource(...) 不会返回 null - Reizo
@Reizo,您能否解释一下如何使用VM参数添加JavaFX模块,就像您在答案中所述的那样。我也遇到了同样的问题,但迄今为止还没有成功解决它。谢谢。 - Trixie the Cat
1
@TrixietheCat 当你使用java启动程序时,必须传递给定的参数。通常情况下,你的IDE会在幕后完成这个过程,并允许你配置要传递给虚拟机的参数。你可以参考这个示例或者查找如何在Eclipse/IntelliJ等工具中指定虚拟机参数 - Reizo

1
这个问题很老,但是在我的IntelliJ(Linux)中,它对我有用的方法如下:
1. 进入“运行” -> “编辑配置”;
2. 在VM选项中添加路径:
--module-path yourpath/lib --add-modules javafx.controls,javafx.fxml

1

enter image description here

在Eclipse中,我从下拉菜单中选择了"MODULE PATH"选项,并且它对我起作用了 - 我不需要vm参数。请确保JavaFx Jars已添加到依赖选项卡(Eclipse >> 项目 >> 配置)下的ModulePath中。

-1

我正在使用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"

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