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 的创建者。