Registry Key '…' มีค่า '1.7' แต่ต้องมี '1.6' ติดตั้ง Java 1.7 แล้วและ Registry ชี้ไปที่มัน


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 VM ซึ่งพบ JRE 7 อาจแสดงปัญหานี้แม้ว่าคุณจะพิมพ์ในบรรทัดคำสั่งเพียงjavaหรือjava -versionในสภาพแวดล้อมที่กำหนดค่าไม่ถูกต้อง JAR ไม่ใช่ปัญหายกเว้นในกรณีที่ไม่น่าเป็นไปได้มากที่โค้ดใน JAR กำลังค้นหาใน Windows Registry สำหรับสิ่งนั้น (ซึ่งอาจไม่ใช่กรณีของคุณ)

ในกรณีของฉันฉันมี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ยังใช้งานได้
Luminous

1
System32 เป็นกุญแจสำคัญสำหรับฉัน ฉันได้ตรวจสอบให้แน่ใจว่า javapath มีเวอร์ชันที่ถูกต้องและตัวแปรสภาพแวดล้อมของฉันได้รับการตั้งค่าอย่างถูกต้อง ... ไม่มีอะไรทำงานได้จนกว่าฉันจะแก้ไขข้อตกลง System32 นั้น ทุกอย่างจะต้องอยู่ในหน้าเดียวกัน
ทม.

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 Runtime Environment

สภาพแวดล้อมของฉันได้รับการตั้งค่าอย่างถูกต้อง (Path & java_home กำหนดไว้อย่างถูกต้อง) แต่ปัญหาเกิดจากวิธีการทำงานของโปรแกรมติดตั้ง Java รุ่นก่อน -8 ซึ่งใช้ในการคัดลอกไฟล์ปฏิบัติการทั้งสาม (java.exe, javaw.exe & javaws.exe ) ไปยังไดเร็กทอรีระบบ Windows สิ่งเหล่านี้จะยังคงอยู่เว้นแต่จะถูกเขียนทับโดยการติดตั้งก่อน 8 ใหม่

อย่างไรก็ตามโปรแกรมติดตั้ง Java 8 จะสร้างลิงก์สัญลักษณ์ในไดเร็กทอรีใหม่แทน C: \ ProgramData \ Oracle \ Java \ javapath ซึ่งชี้ไปที่ตำแหน่ง JRE 8 จริง

ซึ่งหมายความว่าคุณจะใช้งาน 7 exes เก่า แต่ใช้ 8 DLL ใหม่

ดังนั้นวิธีแก้ปัญหาก็คือการลบ Java 3 exes ตามด้านบนออกจากไดเร็กทอรีระบบ windows

หากคุณใช้ Java 32 บิตบน Windows 64 บิต exes จะอยู่ใน Windows \ SysWOW64 หรือใน Windows \ System32


นี่เป็นวิธีแก้ปัญหาที่ใช้งานได้ฉันประสบปัญหาเดียวกันและสิ่งนี้แก้ไขได้
Sagar D

นี่เป็นทางออกที่ดีกว่ามาก ... อย่างน้อยสำหรับฉัน ขอบคุณ.
cbmeeks

28

ฉันได้ลบไฟล์ java ที่ windows / system32 และฉันยังลบ c: \ ProgramData \ Oracle \ Java \ javapath ออกจากตัวแปร PATH เนื่องจากมี symlink 3 รายการไปยังไฟล์ java 1.8

ฉันมี JDK 1.7 ในตัวแปร% JAVA_HOME% และ java1.7 / bin ใน PATH

PS1: ปัญหาของฉันอยู่ระหว่าง Java 1.7 และ Java 1.8

PS2: ฉันไม่สามารถเพิ่มสิ่งนี้เป็นความคิดเห็นในคำตอบของ Victor ได้เพราะฉันมีคะแนนไม่เพียงพอ


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

ในเมนู START ให้พิมพ์ "regedit" เพื่อเปิด Registry Editor

ไปที่ "HKEY_LOCAL_MACHINE" ทางด้านซ้ายมือของเมนู Registry explorer / tree

คลิก "SOFTWARE" ภายในรีจิสเตอร์ "HKEY_LOCAL_MACHINE"

คลิก "JavaSoft" ภายในรีจิสเตอร์ "SOFTWARE"

คลิก "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" ส่งคืน "Java HotSpot (TM) 64-Bit Server VM (build 23.1-b03, mixed mode)" แต่ฉันได้ติดตั้งบริการ Win32 ...

ปรากฎว่าถ้าคุณใช้ Win32 wrapper บนเครื่อง 64 บิตก็จะตัดสินใจใช้ Java เวอร์ชันอื่น ...

ดังนั้นการแก้ไขของฉันคือถอนการติดตั้ง Wrapper เวอร์ชัน 32 บิตและติดตั้งเวอร์ชัน 64 บิต ความเกลียดชังบนเครื่องของฉัน แค่นิสัยฉันเดา ... แต่โชคดีที่ฉันแก้ไขปัญหาในที่สุด ...


1
คุณสามารถพบปัญหานี้ได้หากคุณติดตั้ง Java ทั้งเวอร์ชัน 32 และ 64 บิตและการอัปเดตอัตโนมัติ (หรือในกรณีของฉันบังคับให้องค์กร) อัปเดตเพียง 1 รายการเท่านั้น การถอนการติดตั้ง Java ทั้งหมดและติดตั้งใหม่ทั้ง 32 และ 64 บิตจะแก้ไขได้
DannyMeister

0

สำหรับ Win7. ของฉัน

Paradox เป็น java.exe และ javaw.exe ในโฟลเดอร์ System32 เปิดโฟลเดอร์นั้นฉันมองไม่เห็น แต่ใช้การค้นหาในเมนูเริ่มฉันได้รับลิงก์ไปยังไฟล์เหล่านั้นและลบออก Searsh ถัดไปให้ลิงก์ไปยังไฟล์จาก JAVA_HOME

มายากล )


-1

เปลี่ยนเป็นไดเร็กทอรีที่ถูกต้อง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 


-3

โถถูกรวบรวมให้เป็น1.6 ไปตามข้อกำหนด นั่นคือเหตุผลที่คุณได้รับข้อผิดพลาดนี้ สองความละเอียด:
1) ใช้ Java 1.6

หรือ

2) รวบรวมโถใหม่เพื่อให้สอดคล้องกับสภาพแวดล้อมของคุณ 1.7


ฉันได้ทำทั้งสองอย่างแล้ว แต่ขอสำรองข้อมูลสักหน่อย JAR กำลังทำงานผ่าน C # GUI JAR ทำงานผ่านบรรทัดคำสั่ง แต่ไม่ผ่าน GUI ฉันคิดว่าอาจเป็น JAR อื่นภายใน JAR ที่ฉันกำลังทำงานอยู่ (เกี่ยวกับการเรียกใช้ GUI) แล้วอาจเป็นเช่นนั้นได้หรือไม่? ไฟล์ JAR ที่ซ้อนกันถูกคอมไพล์เป็น 1.6?
Bryan A

ฟังดูไม่น่าเชื่อ เวอร์ชัน Java สามารถใช้งานร่วมกันได้ โค้ดที่คอมไพล์สำหรับ / บน JDK 6 จะทำงานบน Java 7 โดยไม่ต้องคอมไพล์ใหม่หรือแก้ไข
Jesper

@Jesper ฉันอาจจะสับสนกับปัญหาที่คล้ายกันที่ฉันเห็นใน Eclipse บ่อยๆ
Woot4Moo

1
@ เจสเปอร์นั่นคือเหตุผลที่ทั้งหมดนี้ไม่สมเหตุสมผลสำหรับฉัน ทุกสิ่งที่ฉันพบเกี่ยวข้องกับ JAR เวอร์ชันใหม่ที่ทำงานบน Java รุ่นเก่าเช่น 1.6 พร้อม 1.5 JRE แต่ปัญหานี้ดูเหมือนย้อนกลับ
Bryan A

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.