我正在尝试在Windows 10下使用jGRASP 2在JavaFX 11和Java 11下运行示例JavaFX代码(取自Java Illuminated的第五版).
我已经仔细阅读了“ JavaFX入门”指南(https://openjfx.io/openjfx-docs/),尽管取得了一些进步,但我还是很困惑.
我下载了最新的ZIP文件,将其解压缩,并更新了CLASSPATH,以包含编译所需的jar文件的路径.我可以成功编译该文件.但是,当我尝试运行时,出现以下错误消息:
Error: JavaFX runtime components are missing,and are required to run this application
“入门”指南说,可以通过在运行时调用中添加以下选项来解决此问题:
–module-path “[path]\lib” –add-modules=javafx.controls,javafx.fxml
先前的StackOverflow文章通常以上面的选项设置结尾; las,我不知道该怎么办.
我想并没有多少人熟悉此IDE,因此我将按照基本步骤发布我遵循的步骤:
> Download并安装jGRASP版本2.0.5_05 Beta.
>因为我已经安装了一些JDK,所以默认情况下选择了JDK 10.0.2,所以我的第一步是找到一种使用JDK 11的方法.可以在Settings-> jGrasp启动设置,可以在其中设置Java可执行文件的路径:
然后,我重新启动了jGrasp.您可以在工具->中验证IDE使用的是哪个JDK.系统信息-> Java版本.
>打开HelloFX示例类.我从the OpenJFX docs开始最基本的示例.可以找到代码here.
>构建->鉴于JavaFX不再是JDK的一部分,按预期进行编译会引发很多错误:
>按照OpenJFX文档,我们需要从here下载JavaFX SDK,然后将库添加到类路径.转到设置->路径/类路径->在工作区中,按“新建”,然后从下载的SDK / lib文件夹(至少javafx-base.jar,javafx-graphics.jar和javafx-controls.jar)中逐一添加不同的JavaFX jar.
>构建->编译现在应该可以工作了.
>下一步:构建->跑.这将失败:
----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参数.
>首次尝试:使用运行参数.设置后:
--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参数应该放在类名之前.
结论:运行参数不是VM参数!
>第二次尝试:为了提供VM参数,我发现的选项是编辑设置->编译器设置->工作区.默认情况下,它使用的是通用的jdk(集成调试器).您可以查看它,并看到它在运行中使用:
java %S -ea %S %<FLAGS2> %<MAIN_CLASS> %<ARGS>
因此,我们需要找到一种设置FLAGS2的方法,而不是ARGS.
幸运的是,在“环境”选项卡旁边,有一个“标志/ Args”选项卡,我们可以在FLAGS2中设置vm参数:
--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls
>应用,关闭对话框,然后Build->运行课程,现在可以使用了!
如果您看到控制台日志,则它完全包含您在命令行上运行时将使用的命令:
----jGRASP exec: java --module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls HelloFX
----jGRASP: operation complete.
我想下一步将运行一个更复杂的项目…