首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX 11:"JavaFX运行时组件丢失“

JavaFX 11:"JavaFX运行时组件丢失“
EN

Stack Overflow用户
提问于 2019-02-13 03:38:41
回答 2查看 3.8K关注 0票数 3

我试图在JavaFX 11和Java11下运行示例JavaFX代码(摘自第5版Java )和Java11,在Windows 10下使用jGRASP 2。

我已经广泛阅读了“开始使用JavaFX”指南(https://openjfx.io/openjfx-docs/),虽然我已经取得了一些进展,但我还是被困住了。

我下载了最新的ZIP文件,解压缩了它,并更新了CLASSPATH,以包含编译所需的jar文件的路径。我可以成功地编译这个文件。但是,当我尝试运行时,会收到以下错误消息:

错误:缺少JavaFX运行时组件,需要运行此应用程序

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

-模块-路径"path\lib“--add=javafx.Controls,javafx.fxml

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

以前的StackOverflow文章通常以上面的选项设置结束;唉,我不知道还能做什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-13 18:48:29

作为第一次用户,我设法使它工作,但这不是简单的我。

我想熟悉这个IDE的人不多,所以我将发布我遵循的步骤,作为基本教程:

  • 下载并安装jGRASP版本2.0.5_05 Beta。
  • 由于我安装了一些JDK,默认情况下它选择了JDK10.0.2,所以我的第一步是找到一种使用JDK 11的方法。这可以在Settings -> jGrasp Startup Settings中完成,在这里我可以为我的java可执行文件设置路径:

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

  • 打开HelloFX示例类。我从OpenJFX文档中最基本的示例开始。代码可以找到这里
  • 与预期一样,Build -> compile将抛出大量错误,因为JavaFX不再是JDK的一部分:

  • 在OpenJFX文档之后,我们需要从这里下载JavaFX SDK,然后将库添加到类路径中。转到Settings -> PATH/CLASSPATH -> Workspace,按New,然后逐个添加下载的SDK/lib文件夹中的不同JavaFX jars (至少javafx-base.jarjavafx-graphics.jarjavafx-controls.jar)。
  • Build -> compile现在应该可以工作了。
  • 下一步:Build -> Run。这是失败的:
代码语言:javascript
复制
----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.

这是意料之中的。根据文档,我们需要设置模块路径和添加模块参数。

  • 第一次尝试:使用Run arguments。设置后:
代码语言:javascript
复制
--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls

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

代码语言:javascript
复制
----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使用的是:
代码语言:javascript
复制
java %S -ea %S %<FLAGS2> %<MAIN_CLASS> %<ARGS>

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

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

代码语言:javascript
复制
--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls

  • 应用,关闭对话框,并Build -> Run类,现在它将工作!

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

代码语言:javascript
复制
----jGRASP exec: java --module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls HelloFX

 ----jGRASP: operation complete.

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

票数 3
EN

Stack Overflow用户

发布于 2019-12-28 13:39:38

尝试简单地创建一个仅使用主方法的启动程序。它可能看起来像这样:

代码语言:javascript
复制
package application;

import javafx.application.Application;

public class MyAppLauncher {

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

(您可以暂时在应用程序中保留旧的主方法未使用)

这对我适用于JDK 13 & JavaFX 13 &Eclipse2019-12在Ubuntu下。

(我使用"new/Maven Project/Simple“创建了这个项目,然后在pom.xml中添加了JavaFX、日志和其他东西作为依赖项,所有这些都落在了Classpath上。只有JDK在模块路径上)

不需要为Java模块操心。

如果这有效的话,您可以花些时间了解Java模块化。

...and记得投票支持这个答案。:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54662129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档