Ключ реестра "..." имеет значение "1,7", но требуется "1,6". Java 1.7 установлена ​​и на нее указывает реестр

Моя команда разработчиков недавно была вынуждена перейти в удаленную среду разработки, где у нас нет полного доступа к серверам. До изменения у нас был JAR, который работал нормально на Java 1.7 x64 вместе с JRE 7. Когда мы перешли на новый сервер, наш JAR работал нормально, но затем один из администраторов сервера "обновил" нашу Java до более старой. версия и удалили ту, которую мы использовали. Не спрашивай меня почему, я не знаю. Я переустановил Java 1.7 и удалил 1.6 вместе с JRE.

Следующая проблема возникает во время выполнения, нет ошибок сборки:

Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.7', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.

Я запустил тот же JAR на своем ноутбуке без проблем. И сервер, и мой ноутбук имеют JDK 1.7 и JRE 7 с соответствующими переменными%HOME% и системным PATH. Я даже переустановил JRE 6 и поместил его позже в переменные PATH системной среды с тем же результатом.

Я также изменил реестр обратно, чтобы посмотреть на 1.6, и это приводит к следующему, который я посмотрел, и это, кажется, из-за установки нескольких Javas (возвращаясь к моей первоначальной проблеме):

Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0

Я был бы признателен за любые идеи, которые у вас есть, поскольку я просматривал различные форумы, но, похоже, ни в чем не было моей проблемы. Кроме того, это произошло на другом сервере, который мы используем. Спасибо!

Обновление: не повезло с перекомпиляцией JAR до 1.6 или 1.7 и соответствием JDK. Кроме того, почему в мире более новая версия Java ломает старую скомпилированную версию?

10 ответов

Это происходит, когда вы как-то перепутали саму Java. Вы пытаетесь запустить виртуальную машину Java 6, где она обнаружила JRE 7. Это может показать эту проблему, даже если вы наберете в командной строке просто java или же java -version в неправильно настроенной среде. JAR не является проблемой, за исключением очень маловероятного случая, когда код в JAR ищет это в реестре Windows (что, вероятно, не ваш случай).

В моем случае я имел java.exe, javaw.exe а также javaws.exe с Java 6 в Windows/System32 папка (не знаю, как это должно быть там). Остальная часть JDK и JRE была найдена в PATH внутри C:\Java\jdk_1.7.0\bin, К сожалению!

Просто была похожая ошибка при установке java 8 (jdk & jre) в систему, уже работающую под управлением Java 7.

Ошибка: ключ реестра 'Software\JavaSoft\Java Runtime

Среда '\CurrentVersion' имеет значение '1,8', но требуется '1,7'.

Ошибка: не удалось найти java.dll Ошибка: не удалось найти среду выполнения Java SE.

Моя среда была настроена правильно (путь и java_home правильно определены), но проблема возникает из-за того, как работали установщики Java до 8, а именно, что они использовали для копирования трех исполняемых файлов (java.exe, javaw.exe & javaws.exe)) в системный каталог Windows. Они остаются, если не будут перезаписаны новой установкой до 8.

Однако установщик Java 8 вместо этого создает символические ссылки в новом каталоге, C:\ProgramData\Oracle\Java\javapath, указывая на фактическое местоположение JRE 8.

Это означает, что вы на самом деле запустите старые 7 exe, но будете использовать новые 8 DLL.

Таким образом, решение состоит в том, чтобы просто удалить 3 exe Java, как указано выше, из системного каталога Windows.

Если вы работаете с 32-битной Java на 64-битной Windows, exes будет в Windows\SysWOW64, в противном случае в Windows\System32.

Я удалил java-файлы в windows/system32, а также удалил c:\ProgramData\Oracle\Java\javapath из переменной PATH, потому что было 3 символических ссылки на файлы java 1.8.

У меня был JDK 1.7 в переменной%JAVA_HOME% и java1.7/bin в переменной PATH.

PS1: Моя проблема была между Java 1.7 и Java 1.8.

PS2: я не могу добавить это как комментарий к ответу Виктора, потому что у меня недостаточно очков.

В меню "ПУСК" введите "regedit", чтобы открыть редактор реестра.

Перейдите к "HKEY_LOCAL_MACHINE" в левом меню просмотра / дерева реестра.

Нажмите "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ" в реестрах "HKEY_LOCAL_MACHINE"

Нажмите "JavaSoft" в реестре "ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ".

Нажмите "Java Runtime Environment" в списке "JavaSoft" реестров, здесь вы можете увидеть различные версии установленного Java

Нажмите "Java Runtime Environment"- с правой стороны вы получите 4-5 строк. Пожалуйста, выберите "CurrentVersion" и щелкните правой кнопкой мыши (выберите вариант "Изменить"). Измените версию на "1.7"

Теперь магия завершена

Я не знаю, следит ли кто-нибудь за этой веткой, но у меня недавно была эта проблема, когда я пытался запустить ActiveMQ 5.10 в качестве службы Windows.

У меня не было пути JAVA_HOME. У меня была установлена ​​Java 6 и Java 7, но версией по умолчанию была v7. (т.е. если я открыл командное окно и набрал "java -version").

Вот где ключ к разгадке - "java -version" вернул "Java HotSpot(TM) 64-битная виртуальная машина сервера (сборка 23.1-b03, смешанный режим)", но мне была установлена ​​служба Win32...

Оказывается, что если вы используете оболочку Win32 на 64-битной машине, она почему-то решит использовать другую версию Java...

Таким образом, я решил удалить 32-разрядную версию оболочки и установить 64-разрядную версию. отвращение к моей машине; просто привычка, я думаю... Но, к счастью, я решил проблему в конце концов...

Для моей Win7

Парадокс был в том, чтобы быть java.exe и javaw.exe в папке System32. Открывая эту папку, я не мог их видеть, но используя поиск в меню "Пуск", я получаю ссылки на эти файлы, удаляю их. Следующий searsh дал мне ссылки на файлы из JAVA_HOME

магия)

Перейдите в каталог с правильным java.exe т.е. перейдите на нужную версию JDK java.exe

cd C:/Program Files/Java/jdk1.7.0_25/bin

Запустить java.exe из этого каталога он имеет приоритет над настройками реестра и $PATH.

java -jar C:/installed/selenium-server-standalone-2.53.0.jar 

Я решил эту проблему, удалив Java 1.8

Фляга была составлена, чтобы быть 1.6 совместимый. Вот почему вы получаете эту ошибку. Два разрешения:
1) Используйте Java 1.6

ИЛИ ЖЕ

2) Перекомпилируйте банку, чтобы соответствовать вашей среде 1.7

Используя regedit, удалите записи, соответствующие java 7. Это будет работать.

Другие вопросы по тегам