我正在尝试在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,我不知道该怎么办。
答案 0 :(得分:2)
作为初次使用的用户,我设法使其正常运行,但是对我而言这并不是一件容易的事。
我想并没有多少人熟悉此IDE,所以我将按照基本步骤发布我遵循的步骤:
Download并安装jGRASP版本2.0.5_05 Beta。
由于我已经安装了一些JDK,因此默认情况下选择了JDK 10.0.2,所以我的第一步是找到一种使用JDK 11的方法。可以在Settings -> jGrasp Startup Settings
中进行操作,其中我可以为我的java
可执行文件设置路径:
然后我重新启动了jGrasp。您可以在Tools -> System Info -> Java Version
中验证IDE正在使用哪个JDK。
打开HelloFX示例类。我从the OpenJFX docs的最基本示例开始。可以找到代码here。
Build -> compile
会抛出很多错误,因为JavaFX不再是JDK的一部分:
按照OpenJFX文档,我们需要从here下载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
!
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
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模块化的信息...
...并记得为这个答案投票。 :-)