我用Java 1.8u45和Inno5将我的JavaFX应用程序打包为带有ant的.exe文件。并且可执行文件在计算机上安装时可以正常工作,其中安装了Java 8并将其设置为JAVA_HOME环境变量,或者根本没有安装任何Java。但是,例如,安装了java 1.6或更低版本,并且JAVA_HOME变量设置为java 1.6,应用程序不会以非常一般的错误Failed to start jvm
启动。通过java -jar foobar.jar
启动捆绑的.jar文件会导致失败并完全停止jvm或打印unsupported major.minor version 52.0
。
如何告诉JavaFX永远不要使用JAVA_HOME?
使用以下命令将应用程序打包为fxbuilder的exe:
<fx:deploy verbose="true" embedJNLP="false" extension="false" includeDT="false" offlineAllowed="true" outdir="${basedir}/target/deploy" outfile="application" nativeBundles="exe" updatemode="background">
<!-- To list all classes loaded -->
<!--<fx:jvmarg value="-verbose:class"/>
<fx:platform basedir="${java.home}" />-->
<fx:info title="App" vendor="Me" />
<fx:application refId="fxApplication" />
<fx:resources refid="appRes" />
</fx:deploy>
答案 0 :(得分:1)
当与JRE捆绑在一起时,本机启动器会查找对应.cfg
- 文件的文件名,其中包含有关JRE位置的信息(应该有一些这样的行:app.runtime=$APPDIR\runtime
)
如果.cfg
- 文件只包含app.runtime=
(没有值),则本机启动程序会搜索本地安装的JRE:
https://github.com/teamfx/openjfx-8u-dev-rt/blob/master/modules/fxpackager/src/main/native/library/common/Package.cpp#L120
在Windows上,本机启动程序检查系统注册表内部并且不检查JAVA_HOME属性! https://github.com/teamfx/openjfx-8u-dev-rt/blob/master/modules/fxpackager/src/main/native/library/common/WindowsPlatform.cpp#L188
其他平台也是如此,但他们正在检查JRE_HOME,但从来没有检查过JAVA_HOME。
我建议你检查一下windows-registry(在JDK 8之后安装了JDK 6,取代了更高版本的版本?)!
免责声明:我是javafx-maven-plugin的维护者和javafx-gradle-plugin的创建者。