2016-10-14 75 views
0

我用Java 1.8u45和Inno5将我的JavaFX应用程序打包为.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设置JAVA_HOME时,JavaFX应用程序无法启动

我该如何告诉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

请详细说明您如何打包应用程序?你有没有使用fxpackager,参数? –

+0

@SergeyGrinev是我使用fxpackager并更新了更详细信息的问题 – Huber

回答

1

当已经捆绑在一起的JRE,本机启动查找对应.cfg -file,其中包含有关的信息的文件名JRE-位置(应该有一些像这样的一行:app.runtime=$APPDIR\runtime

如果.cfg -file只包含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注册表(是在JDK 8之后安装的,它取代了更高版本的JDK)!

声明:我是javafx-maven-plugin和javafx-gradle-plugin创建者的维护者。

+0

JDK或JRE 6在JRE 8之后安装。有什么方法可以强制exe使用'app.runtime'中设置的JRE吗?为什么JavaFX甚至在注册表和JRE_HOME中查找java时,它被封装为可执行文件的一部分? – Huber

+0

我已经仔细检查了源代码,System-JRE仅在'app.runtime'字段没有值时使用。请亲自看看:https://github.com/teamfx/openjfx-8u-dev-rt/blob/master/modules/fxpackager/src/main/native/library/common/Package.cpp#L116 – FibreFoX

+0

@Huber我只是看到你正尝试通过'java'-executable运行你的应用程序,而不是通过本地启动器!您是否尝试使用java.exe的全限定路径?类似于'c:\ Program Files \ Java \ jre1.8.0_92 \ bin \ java.exe -jar foobar.jar' ...如果没有给出完整路径,将会在PATH上找到第一个java – FibreFoX