Я пропустил необходимые шаги для моей JRE и в Launch4j, чтобы вызвать сбой моего исполняемого файла? - PullRequest
0 голосов
/ 28 января 2019

Были некоторые начальные проблемы с моим javac.exe, не работающим с остальной частью программного обеспечения, чтобы иметь возможность компилировать и запускать код, но я смог получить .class и .java для программы, поэтому я подумалЯ мог бы использовать Launch4j, чтобы по-прежнему создавать приложение для нормального выполнения самостоятельно.Однако я не знаю, почему созданный .exe файл не дает ожидаемого результата.

Я использовал руководство, о котором вам, вероятно, известно, научиться тестировать программу «HelloWorld», так как я новичок вJava и превращение фактического кода в приложения.Следуя процедурам, я смог приступить к тестированию файла javac.exe, к которому я обнаружил, что моя версия JDK почему-то неправильно устанавливает ее.Отсюда я узнал, чтобы проверить, существует ли javac.exe, и что каким-то образом папка с java-версией переопределяет аналогичную папку с javac.exe при установке (но я не мог найти, как загрузить и установить без этого),Поэтому я решил просто установить самую новую версию JDK.Я проверил, и в отдельной папке был файл javac.exe, но обновление, похоже, не перекрывало предыдущую версию.Следуя руководству, я смог все проверить, но вывод в конце выдал ошибку о том, что компиляция Java не соответствует среде выполнения.Я подумал о том, чтобы скопировать более новую версию Java с javac.exe в тот же путь времени выполнения [папка java для более новой версии была в Program Files, как и в руководстве, но папка java для исходной версии была в Program Files(x86), к которому я должен был соответственно адаптировать путь переменных среды], но это ничего не исправило.Поскольку я узнал, что Launch4j может связывать шаги с различными версиями, я подумал о том, можно ли просто обернуть все, чтобы работать в exe-файле.Я был в состоянии создать файл, который не имел вывода.Глядя здесь, кто-то сказал, что они могут решить свою проблему, отметив «console» на вкладке «header» вместо «GUI», но единственное, что мне удалось сделать с новым exe-файлом, - это открыть командную строку, чтобы ничего не показывать.Я не уверен, что нужно проверять в командной строке или мне следует знать, что это та же проблема, что и раньше.Или, возможно, Launch4j может работать как есть, но я просто не знаю, что поместить в переменные окружения (я думаю, что я смог получить exe без правильного ввода там во вкладке JRE, так как на этот раз у меня не было руководства)?Должен ли я удалить предыдущую версию, даже если командная строка, кажется, выглядит там или что-то еще будет не хватать, если я это сделаю?

C:\Users\User>java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) Client VM (build 25.201-b09, mixed mode)

C:\Users\User>javac -version
javac 11.0.2

C:\Users\User>cd C:\JavaTest

C:\JavaTest>java HelloWorld
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError:  HelloWorld has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

C:\JavaTest>

C:\JavaTest>dir
 Volume in drive C has no label.
 Volume Serial Number is 68EF-F43A

 Directory of C:\JavaTest

01/28/2019  12:46 AM    <DIR>          .
01/28/2019  12:46 AM    <DIR>          ..
01/31/2019  12:56 AM               426 HelloWorld.class
01/27/2019  10:41 PM            25,839 HelloWorld.exe
01/25/2019  12:55 AM               751 HelloWorld.jar
01/22/2019  12:29 AM               114 HelloWorld.java
01/25/2019  01:07 AM               798 HelloWorldconverttoexe.xml
01/27/2019  10:41 PM               802 HelloWorldconverttoexe2.xml
01/25/2019  01:09 AM             1,146 launch4j.log
01/28/2019  12:46 AM             5,102 questiontostackoverflow.txt
               8 File(s)         34,978 bytes
               2 Dir(s)  561,260,572,672 bytes free

C:\JavaTest>

Несмотря на вывод, который я получил, показывая ошибку JNI, и проверка версий не совпадает,Я думал, что смогу получить правильный вывод вручную.Когда это не сработало, я ожидал, что появится сообщение «HelloWorld» (то, чем просто является программный код) при создании exe-файла с Launch4j, но обе попытки не привели к выводу при открытии приложения (первый раздаже не открывал командную строку, но второй раз кратко сделал, прежде чем закрыть его).Кажется, что нет проблем с самим программным обеспечением и, конечно, не с программным кодом, а с процессом запуска кода после его компиляции, и я полагаю, что это продолжается независимо от переменных для Launch4j.Я чувствую, что наличие папки программ «JavaTest» отдельно и непосредственно на локальном диске не представляет опасности, поскольку ни одно из руководств не дало мне повода для беспокойства по этому поводу.Я чувствую, что если я что-то изменит, я усугублю проблему.В частности, если я удалю версию Java 8 (которая, как ни странно, указана в качестве обновления, даже если я уверен, что я получил весь комплект JD от Oracle), я чувствую, что потерю другую часть, чем javac.exe, в качестве командной строкине полностью прямо к версии 11 для всего.Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Чтобы уточнить, как я изменил мои системные переменные, JAVA_HOME первоначально имел значение "C: \ Program Files (x86) \ Java \ jre1.8.0_201" с отсутствующей папкой bin "javac.exe";после установки новейшего JDK я пытался при копировании файла «jdk-11.0» «C: \ Program Files \ Java \ jdk-11.0.2» и «C: \ Program Files (x86) \ Java \ jdk-11.0.2».2 "папка в ту же папку, что и предыдущая версия в Program Files (x86), но командная строка по-прежнему выводит старую версию, когда я вводлю" java -version ";та же ошибка возникает при вводе «java HelloWorld» из папки JavaTest на локальном диске.Переменная «Path» всегда начиналась с «Program Files (x86) \ Common Files \ Oracle \ Java ...», в которую я редактирую «% JAVA_HOME% \ bin» с уверенностью в синтаксисе.При этом я не могу понять, как все не может быть найдено в новейшем JDK, включая начальную проверку версии в командной строке, особенно когда команда echo% PATH% действительно указывает на самый новый "jdk-11.0.2 "версия основана на выводе в командной строке.

EDIT2: я не уверен, что использование функции обновления для автоматического или ручного обновления до 11 вместо этого помешало бы системе Java на панели управленияЯ могу работать с конфигурацией панели управления, не только распознавая версию Java 8, как сейчас, но даже с установкой Java 11 из прямой загрузки.На стороне пользователя, когда я снимаю флажок с пути к включаемой Java 8 и добавляю пути Java 11 как из Program Files, так и из (x86) либо с помощью javaw.exe, либо из всей папки, командная строка дает тот же результат.Вкладка системы даже не позволяет мне добавить путь из версии Java 11, но позволяет отменить включение версии Java 8 (которая все равно не имеет значения).
Я заметил несколько других отличий в моей ситуациииз руководства, хотя я не знаю, имеет ли это значение.Похоже, что переменные среды пользователя в руководстве по-прежнему включают Java в путь, но единственными направлениями для меня было редактирование системных переменных для перехода к пути Java.Вывод «dir» в руководстве показывает все с той же датой, но «dir» в моей командной строке показывает только обновление до даты файла «HelloWorld.class» (я добавил вывод для этого редактирования вконец раздела кода вопроса), что может иметь смысл, поскольку я знаю, что более старые попытки launch4j не будут затронуты.
Я в порядке с Java 8, но если удаление всего и переустановка Java 8 не получит javac.exe-файл, переместит ли только файл javac.exe Java 11 в папку bin папки Java 8 jre (после сброса путей к Java 8 и поиска способа избавиться от остатка Java 11)?

1 Ответ

0 голосов
/ 28 января 2019

проверьте свой путь, вы можете проверить переменные среды или запустить в командной строке Windows (CMD)

echo %PATH%

вы должны указывать только на одну версию JAVA, я полагаю, что вы указываете на Java 1.8.0_201 и javac из другой java (может быть java 11?).

Полагаю, вы видите javac в JDK11 , но вы не видите javac в JRE8 .Если вы хотите использовать Java 8 , скачайте JDK для Java 8 и укажите на него.

Если вы хотите использовать Java 11, удалите ссылки на Java 8 в вашем PATH

...