2016-10-14 74 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