java - JavaFX 11:“缺少 JavaFX 运行时组件”
问题描述
我正在尝试使用 Windows 10 下的 jGRASP 2 在 JavaFX 11 和 Java 11 下运行示例 JavaFX 代码(取自 Java Illuminated 的第 5 版)。
我已经广泛阅读了“JavaFX 入门”指南 ( https://openjfx.io/openjfx-docs/ ),虽然我取得了一些进展,但我还是被卡住了。
我已经下载了最新的 ZIP 文件,将其解压缩,并更新了 CLASSPATH 以包含编译所需的 jar 文件的路径。我可以成功编译该文件。但是,当我尝试运行时,我收到以下错误消息:
错误:缺少 JavaFX 运行时组件,需要运行此应用程序
“入门”指南说,可以通过在运行时调用中添加以下选项来解决此问题:
--module-path "[path]\lib" --add-modules=javafx.controls,javafx.fxml
我已经添加了选项,但我仍然收到错误消息。
以前的 StackOverflow 文章通常以上面的选项设置结束;唉,我不知道还能做什么。
解决方案
作为第一次使用的用户,我设法让它工作,但这对我来说并不简单。
我想没有多少人熟悉这个IDE,所以我将发布我遵循的步骤,作为一个基本教程:
下载并安装 jGRASP 版本 2.0.5_05 Beta。
由于我安装了一些 JDK,它默认选择 JDK 10.0.2,所以我的第一步是找到一种使用 JDK 11 的方法。这可以在 中完成
Settings -> jGrasp Startup Settings
,我可以在其中设置java
可执行文件的路径:
然后我重新启动了jGrasp。您可以验证 IDE 使用的是哪个 JDK Tools -> System Info -> Java Version
。
打开 HelloFX 示例类。我从OpenJFX 文档中最基本的示例开始。代码可以在这里找到。
Build -> compile
,正如预期的那样,鉴于 JavaFX 不再是 JDK 的一部分,将会引发一堆错误:
按照 OpenJFX 文档,我们需要从这里下载 JavaFX SDK ,然后将库添加到类路径中。转到
Settings -> PATH/CLASSPATH -> Workspace
,按新建,然后从下载的 SDK/lib 文件夹(至少javafx-base.jar
,javafx-graphics.jar
和javafx-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
选项卡,我们可以在其中设置我们的 vm 参数FLAGS2
:
--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls
- 应用,关闭对话框,然后
Build -> Run
类,现在它可以工作了!
如果您看到控制台日志,它包含您在命令行上运行时将使用的命令:
----jGRASP exec: java --module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls HelloFX
----jGRASP: operation complete.
我想下一步将运行一个更复杂的项目......
推荐阅读
- python - 找不到我需要点击的对象
- flutter - 如何使用 FFI 映射 Dart 字符串
- postgresql - 如何将压缩文件从 FTP 服务器导入 PostgreSQL 数据库?
- javascript - 页面刷新时无法发送不同的网址
- css - Webpack 为每次导入生成 css 文件
- javascript - localStorage 和带有页面 id 的 url
- authentication - 如何为 Entity Framework 和 ASP.Net Core Identity 使用预先存在的表
- java - 抽象类避免创建多个对象实例来传递不同的输入
- c++ - C++ 动态数组每次添加都会将大小增加 1 - 错误
- ios - 使用虚拟摇杆下降会在 Mavic 2 pro 上产生漂移问题