JavaFX 应用程序在设置 JAVA_HOME 时不启动
JavaFX Application does not start when JAVA_HOME is set
我用 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>
与 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-property!
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-注册表(JDK 6 是在 JDK 8 之后安装的,它取代了更高版本?)!
免责声明:我是 javafx-maven-plugin 的维护者和 javafx-gradle-plugin 的创建者。
我用 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>
与 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-property! 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-注册表(JDK 6 是在 JDK 8 之后安装的,它取代了更高版本?)!
免责声明:我是 javafx-maven-plugin 的维护者和 javafx-gradle-plugin 的创建者。