Ключ реєстру "..." має значення "1,7", але потрібно "1,6". Java 1.7 встановлена, і реєстр вказує на неї


95

Нещодавно мою команду розробників перенесли у віддалене середовище розробки, де ми не маємо повного доступу до серверів. До зміни ми мали 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% та системному ШЛЯХУ. Я навіть переінсталював 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 ламає стару скомпільовану версію?

Відповіді:


159

Це трапляється, коли ви якось переплутали саму Java. Ви намагаєтеся запустити віртуальну машину Java 6, де вона знайшла JRE 7. Це може показати цю проблему, навіть якщо ви вводите командний рядок просто javaабо java -versionв неправильно налаштованому середовищі. JAR не є проблемою, за винятком дуже малоймовірного випадку, коли код у JAR шукає в Реєстрі Windows це (що, мабуть, не у вашому випадку).

У моєму випадку, у мене був java.exe, javaw.exeі javaws.exeз Java 6 в Windows/System32папці (не знаю , як це повинно бути там). Решта JDK та JRE знайдено у ШЛЯХІ всередині C:\Java\jdk_1.7.0\bin. На жаль!


62
Зіткнулася з тією ж проблемою, але з Java 8 після її видалення. Виправлена ​​проблема шляхом видалення файлів java.exe, javaw.exe та javaws.exe, присутніх у Windows / System32. Дійсно, бо я навіть не знаю, як воно туди потрапило.
C Deepak

2
Дякуємо за повідомлення, це допомагає. JDK 1,7 проти JDK 1,8 у моєму випадку.
daoway

7
Для людей x86 !! Я спочатку встановив 1.8 jre пару місяців тому і хотів 1.8 sdk. java.exe,, javaw.exeі javaws.exeзберігається в Windows/SysWOW64. Крім того, з якої - то причини , коли я встановив 1,8 SDk він встановлений java.exe, javaw.exeі javaws.exeпід C:/ProgramData/Oracle/Java/javapath. Не знаю чому, але я їх також видалив і java -versionвсе ще працює.
Світловий

1
System32 був для мене ключовим. Я переконався, що javapath має правильну версію, і мої змінні середовища встановлені належним чином ... нічого не працювало, поки я не виправив цю угоду System32. Це все має бути на одній сторінці.
BK

2
видалення java.exe, javaw.exe та javaws.exe, присутніх у indows / System32, вирішує проблему для мене. Дякую @C Deepak
Tahir Jilani

59

Просто мала подібну помилку під час встановлення Java 8 (jdk & jre) в системі, на якій вже працює Java 7.

Помилка: ключ реєстру 'Software \ JavaSoft \ Java Runtime

Середовище '\ CurrentVersion' має значення '1,8', але обов'язкове '1,7'.

Помилка: не вдалося знайти java.dll Помилка: Не вдалося знайти середовище виконання Java SE.

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

Однак натомість інсталятор Java 8 створює символічні посилання в новому каталозі, C: \ ProgramData \ Oracle \ Java \ javapath, вказуючи на фактичне розташування JRE 8.

Це означає, що ви насправді будете запускати старі 7 колишніх, але використовувати нові 8 DLL-файлів.

Отже, рішення полягає в тому, щоб просто видалити 3 exe Java, як зазначено вище, із системного каталогу Windows.

Якщо ви використовуєте 32-розрядну Java у 64-розрядної Windows, exes буде в Windows \ SysWOW64, інакше в Windows \ System32.


Це робоче рішення, я зіткнувся з тією ж проблемою, і це вирішило.
Сагар Д,

Це набагато краще рішення ... принаймні для мене. Дякую.
cbmeeks

28

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

У мене був JDK 1.7 у змінній% JAVA_HOME% та java1.7 / bin у PATH.

PS1: Моя проблема була між Java 1.7 та Java 1.8.

PS2: Я не можу додати це як коментар до відповіді Віктора, оскільки мені недостатньо балів.


3
Проблема: Я зіткнувся з проблемою 1.7 та 1.8 під час спроби використовувати sencha cmd. Рішення: Я додав шлях jdk1.7 / bin до змінної середовища% PATH% і видалив файли Java (java.exe, javaw.exe, javaws.exe) з каталогу c: / windows / system32. Проблема вирішена :)
saurabh

3
цілою проблемою f *** були файли X: \ Windows \ SysWOW64 та X: \ Windows \ System32 java * .exe .. після видалення всі знову запрацювали ..
thiagoh

17

У меню СТАРТ введіть "regedit", щоб відкрити редактор реєстру

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

Клацніть на "ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ" в реєстрі "HKEY_LOCAL_MACHINE"

Клацніть на "JavaSoft" у реєстрі "ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ"

Клацніть на "Java Runtime Environment" у списку реєстрів "JavaSoft", тут ви побачите різні версії встановленого Java

Клацніть на "Java Runtime Environment" - з правого боку ви отримаєте 4-5 рядків. Виберіть "CurrentVersion" та клацніть правою кнопкою миші (виберіть параметр зміни) Змінити версію на "1.7"

Тепер магія закінчена


4

Я не знаю, чи хтось досі слідкує за цим потоком, але нещодавно у мене виникла ця проблема, коли я намагався запустити ActiveMQ 5.10 як службу Windows.

У мене не встановлено шлях JAVA_HOME. У мене були встановлені Java 6 та Java 7, але версія за замовчуванням була v7. (тобто, якщо я відкрив вікно команд і набрав "java -version").

Тут і був підказка - "java -version" повернула "64-бітну серверну машину Java HotSpot (TM) (збірка 23.1-b03, змішаний режим)", але мені встановили службу Win32 ...

Виявляється, якщо ви використовуєте обгортку Win32 на 64-розрядному комп'ютері, вона якось вирішує використовувати іншу версію Java ...

Тож моє виправлення полягало у видаленні 32-розрядної версії обгортки та встановленні 64-розрядної версії. відраза на моїй машині; я гадаю лише за звичкою ... Але на щастя, врешті-решт я вирішив проблему ...


1
Ви можете зіткнутися з цією проблемою, якщо у вас встановлені як 32-, так і 64-розрядна версії Java, а автоматичне (або в моєму випадку примусове корпоративне) оновлення оновлює лише 1 з них. Вирішить проблему видалення всіх екземплярів Java та повторна інсталяція як 32, так і 64 біт.
DannyMeister

0

Для мого Win7

Парадокс був у тому, що java.exe та javaw.exe у папці System32. Відкривши цю папку, я не міг їх побачити, але за допомогою пошуку в меню «Пуск» я отримую посилання на ці файли, видаляю їх. Далі searsh дав мені посилання на файли з JAVA_HOME

магія)


-1

Перейдіть до каталогу з правильним, java.exeтобто перейдіть до необхідної версії JDKjava.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 


-3

Банку складено, щоб вона 1.6 відповідала вимогам. Ось чому ви отримуєте цю помилку. Дві роздільні здатності:
1) Використовуйте Java 1.6

АБО

2) Перекомпілюйте банку, щоб вона відповідала вашому оточенню 1.7


Я насправді зробив і те, і інше, але дозвольте трохи підкріпитися. JAR фактично запускається через графічний інтерфейс C #. Сам JAR проходить через командний рядок, але не через графічний інтерфейс. Я думаю, що це може бути інший JAR у JAR, який я запускаю (що стосується запуску графічного інтерфейсу користувача). Чи може тоді це бути так? Що вкладений файл JAR був скомпільований до 1.6?
Bryan A

Це звучить неправдоподібно. Версії Java сумісні вниз; код, скомпільований для / на JDK 6, працюватиме на Java 7 без перекомпіляції та модифікацій.
Jesper

@Jesper, можливо, я плутаю це з подібною проблемою, яку я часто бачу в Eclipse.
Woot4Moo

1
@Jesper, тому для мене все це не має сенсу. Все, що я знаходжу, пов’язане з новою версією JAR, що працює на старій Java, як 1.6 з 1.5 JRE. Але ця проблема здається зворотною.
Bryan A,

-3

За допомогою regedit видаліть записи, що відповідають Java 7. Це спрацює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.