JavaFX 11:“缺少JavaFX运行时组件”

时间:2019-02-13 03:38:41

标签: java javafx jgrasp javafx-11

我正在尝试在Windows 10下使用jGRASP 2在JavaFX 11和Java 11下运行示例JavaFX代码(摘自Java Illuminated的第五版)。

我已经仔细阅读了《 JavaFX入门指南》(https://openjfx.io/openjfx-docs/),尽管取得了一些进步,但我还是很困惑。

我已经下载了最新的ZIP文件,将其解压缩,并更新了CLASSPATH,以包含编译所需的jar文件的路径。我可以成功编译该文件。但是,当我尝试运行时,出现以下错误消息:

  

错误:缺少JavaFX运行时组件,并且是运行此应用程序所必需的

“入门”指南说,可以通过在运行时调用中添加以下选项来解决此问题:

  

-module-path“ [path] \ lib” --add-modules = javafx.controls,javafx.fxml

我已经添加了选项,但仍然收到错误消息。

以前的StackOverflow文章通常以上面的选项设置结尾; las,我不知道该怎么办。

2 个答案:

答案 0 :(得分:2)

作为初次使用的用户,我设法使其正常运行,但是对我而言这并不是一件容易的事。

我想并没有多少人熟悉此IDE,所以我将按照基本步骤发布我遵循的步骤:

  • Download并安装jGRASP版本2.0.5_05 Beta。

  • 由于我已经安装了一些JDK,因此默认情况下选择了JDK 10.0.2,所以我的第一步是找到一种使用JDK 11的方法。可以在Settings -> jGrasp Startup Settings中进行操作,其中我可以为我的java可执行文件设置路径:

SetJDK 11

然后我重新启动了jGrasp。您可以在Tools -> System Info -> Java Version中验证IDE正在使用哪个JDK。

  • 打开HelloFX示例类。我从the OpenJFX docs的最基本示例开始。可以找到代码here

  • 鉴于预期,
  • Build -> compile会抛出很多错误,因为JavaFX不再是JDK的一部分:

Compile fails

  • 按照OpenJFX文档,我们需要从here下载JavaFX SDK,然后将该库添加到类路径中。转到Settings -> PATH/CLASSPATH -> Workspace,按“新建”,然后从下载的SDK / lib文件夹(至少javafx-base.jarjavafx-graphics.jarjavafx-controls.jar)开始,一个个地添加不同的JavaFX jar。

  • Build -> compile现在应该可以使用。

  • 下一步:Build -> Run。失败:

----jGRASP exec: java HelloFX
Error: JavaFX runtime components are missing, and are required to run this application

 ----jGRASP wedge: exit code for process is 1.
 ----jGRASP: operation complete.

那是预期的。根据文档,我们需要设置module-path和add-modules参数。

  • 首次尝试:使用Run arguments。设置后:
--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls

再次运行失败,并显示与上面完全相同的错误消息,但控制台日志中有一个区别:

----jGRASP exec: java HelloFX --module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls

那是怎么回事!?好吧...如果您在命令行上尝试该操作,它也会失败,因为参数的顺序错误,所以vm参数应该在类名前 前。

结论:Run arguments不是VM arguments

  • 第二次尝试:为了提供VM参数,我找到的选项是编辑Settings -> Compiler settings -> Workspace。默认情况下,它使用jdk (integrated debugger) - generic。您可以查看它,并发现它用于Run
java %S -ea %S %<FLAGS2> %<MAIN_CLASS> %<ARGS>

因此,我们需要找到一种设置ARGS的方法,而不是FLAGS2

幸运的是,在Environment标签旁边,有一个Flags/Args标签,我们可以在FLAGS2中设置vm参数:

--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls

VM args

  • 应用,关闭对话框,然后Build -> Run这个类,现在可以使用了!

如果您看到控制台日志,它完全包含您在命令行上运行时将使用的命令:

----jGRASP exec: java --module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls HelloFX

 ----jGRASP: operation complete.

我想下一步将运行一个更复杂的项目...

答案 1 :(得分:0)

尝试仅使用主方法简单地创建启动器。看起来可能像这样:

package application;

import javafx.application.Application;

public class MyAppLauncher {

    public static void main(final String[] args) {
        Application.launch(MyApp.class, args);
    }
}

(您可以暂时将旧的main方法保留在您的App中未使用)
这适用于Ubuntu下的JDK 13&JavaFX 13&Eclipse 2019-12。
(我使用“ new / Maven Project / Simple Project”创建了Project,然后将JavaFX,Logging和其他内容作为依赖项添加到pom.xml中,它们都位于类路径上。只有JDK在Modulepath上)
无需担心Java模块。

如果这行得通,那么您可以花一些时间来学习有关Java模块化的信息...
...并记得为这个答案投票。 :-)