带有JavaFX13:install4j VM参数的非模块化java

带有JavaFX13:install4j VM参数的非模块化java,javafx,jvm,install4j,Javafx,Jvm,Install4j,JAVAFX的Install4J VM参数似乎没有传递到JVM 对于依赖JAVAFX的非模块化应用程序,建议的方法是添加 “--模块路径${path\u TO_FX}--添加模块ALL-module-path” 或java命令行的特定模块。这个很好用。但是,当使用install4j创建安装程序并将其包含在安装程序的Java Invocation VM parameters字段中时,应用程序不会启动并报告错误:Java.lang.RuntimeException:找不到工具箱 这是自更新到Java

JAVAFX的Install4J VM参数似乎没有传递到JVM

对于依赖JAVAFX的非模块化应用程序,建议的方法是添加

“--模块路径${path\u TO_FX}--添加模块ALL-module-path”

或java命令行的特定模块。这个很好用。但是,当使用install4j创建安装程序并将其包含在安装程序的Java Invocation VM parameters字段中时,应用程序不会启动并报告
错误:Java.lang.RuntimeException:找不到工具箱

这是自更新到Java11+(给定模块化和JavaFX分离)以来的新行为。出于其他原因,我们还不希望将整个应用程序模块化。该代码在Eclipse中运行良好,并且可以手动使用命令行或bat启动。我们还尝试使用这些参数包含VMoptions文件,但没有成功

目前正在运行OpenJDK-13、JAVAFX-13和Install4J 7.0.12

--模块路径${path\u TO_FX}--添加模块ALL-module-path

我们如何创建一个install4j安装程序,它的启动行为与我们的命令行相同——识别javafx——但仍然没有对整个应用程序进行模块化

命令行参数包括:

“--模块路径${path\u TO_FX}--添加模块ALL-module-path”

运行install4j启动器时的扩展错误为:

java.lang.RuntimeException: No toolkit found
    at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    at java.base/java.lang.Thread.run(Thread.java:830)

直接使用
--module path
VM参数不适用于install4j中生成的启动器。您是否尝试为启动器配置混合类和模块路径?在launcher向导的“Java调用”步骤中,使用“类路径”和“模块路径”单选按钮在路径配置之间切换。我们已经尝试过,但向模块化或混合模块化方法的转变将需要一些其他繁重的重构工作;因此,我们希望将此版本坚持为非模块化版本。但是我们很困惑;如何不识别VM参数?这似乎是安装程序的一个常规或严格的角色。请帮忙!install4j生成的启动器不使用解释类和模块路径命令行参数的java启动器可执行文件。但是,install4j中的类和模块路径配置相当于
-classpath
-module path
命令行参数,因此我看不出问题出在哪里。@IngoKegel谢谢。这个响应是否意味着JavaFXJAR如果放在安装程序Java调用列表中的模块路径上,应该可以工作,而不是模块路径参数?还是mods而不是JAR?我们已经尝试了几种选择,但仍然没有成功。如果我们在命令提示符下手动调用JVM,并且使用上面的-module路径,那么应用程序将启动。但是,如果我们使用install4j启动器,就会出现一个错误(无法找到javafx)。请举一个清晰的例子,说明如何在install4j中为非模块化应用程序添加JavaFX。实际上,对于Java 11+来说,您应该通过jlink将JavaFX添加到JDK捆绑包中,如果您在那里添加JMODs,或者为默认提供JavaFX的Liberica JDK提供程序选择JMODs,这就是install4j中JRE捆绑包创建所做的。但是,您也应该能够将其添加到模块路径配置中。在这种情况下,VM参数
--addmodules ALL-MODULE-PATH
可能不起作用,您必须指定实际的JavaFX模块,如
--add modules=JavaFX.controls