2016-10-14 3 views
0

Я упакую свое приложение JavaFX с java 1.8u45 и Inno5 в виде файла .exe с муравьем. И исполняемый файл работает при установке его на компьютер, где либо установлена ​​Java 8, либо устанавливается как переменная среды JAVA_HOME или когда никакой Java не установлен вообще. Но если, например, java 1.6 или меньше, а для переменной JAVA_HOME установлено значение java 1.6, приложение не запускается с самой общей ошибкой Failed to start jvm. Запуск связанного файла .jar через java -jar foobar.jar либо приводит к сбою, но и полностью останавливает jvm или печатает unsupported major.minor version 52.0.Приложение JavaFX не запускается, когда установлен JAVA_HOME

Как я могу сказать JavaFX никогда не использовать JAVA_HOME?

Приложение поставляется в виде EXE-файла с fxbuilder, используя:

<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 yes Я использую fxpackager и обновил quesion более подробную информацию. – Huber

ответ

1

Когда то, в комплекте с JRE, родной пусковая смотрит на имя файла, соответствующего .cfg -файл, который содержит информацию о JRE-место (там должно быть некоторыми линии, как это: app.runtime=$APPDIR\runtime)

Если .cfg -файла содержит только app.runtime= (без значения), родные пусковой делает поиск местного установленным JREs: https://github.com/teamfx/openjfx-8u-dev-rt/blob/master/modules/fxpackager/src/main/native/library/common/Package.cpp#L120

В окнах встроенная программа запуска проверяет внутри системного реестра и НЕ проверяет свойство 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 6 ПОСЛЕ JDK 8, который заменил более высокую версию?)!

Отказ от ответственности: Я поддерживаю javafx-maven-плагин и создатель плагина javafx-gradle.

+0

JDK или JRE 6 был установлен после JRE 8. Есть ли способ заставить exe использовать JRE, установленный в 'app.runtime'? Почему JavaFX даже ищет Java в реестре и JRE_HOME, когда он упакован как часть исполняемого файла? – 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' ... первая java, найденная на PATH, будет взята, если полный путь не указан – FibreFoX

 Смежные вопросы

  • Нет связанных вопросов^_^