Khoá đăng ký '…' có giá trị '1.7', nhưng '1.6' là bắt buộc. Java 1.7 đã được cài đặt và cơ quan đăng ký đang trỏ tới nó


95

Nhóm phát triển của tôi gần đây đã buộc phải chuyển sang môi trường phát triển từ xa nơi chúng tôi không có toàn quyền truy cập vào các máy chủ. Trước khi thay đổi, chúng tôi có một JAR đang chạy tốt trên Java 1.7 x64 cùng với JRE 7. Khi chúng tôi chuyển sang máy chủ mới, JAR của chúng tôi đang chạy ổn, nhưng sau đó một trong những quản trị viên máy chủ đã "cập nhật" Java của chúng tôi lên phiên bản cũ hơn và gỡ cài đặt phiên bản chúng tôi đang sử dụng. Đừng hỏi tôi tại sao, tôi không biết. Tôi đã cài đặt lại Java 1.7 và gỡ cài đặt 1.6 cùng với JRE.

Sự cố sau xảy ra trong thời gian chạy, không có lỗi xây dựng:

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.

Tôi đã chạy cùng một JAR trên máy tính xách tay của mình mà không có vấn đề gì. Cả máy chủ và máy tính xách tay của tôi đều có JDK 1.7 và JRE 7 trong các biến% HOME% tương ứng và PATH hệ thống. Tôi thậm chí đã cài đặt lại JRE 6 và đặt nó sau đó trong các biến PATH của môi trường hệ thống với cùng kết quả.

Tôi cũng đã thay đổi sổ đăng ký trở lại giao diện 1.6 và nó dẫn đến kết quả như sau, tôi đã tra cứu và có vẻ như đã được cài đặt nhiều Jav (dẫn đến sự cố ban đầu của tôi):

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

Tôi sẽ đánh giá cao bất kỳ thông tin chi tiết nào mà tất cả các bạn có được khi tôi đã xem qua các diễn đàn khác nhau nhưng dường như không có gì chính xác là vấn đề của tôi. Ngoài ra, điều này cũng xảy ra trên một máy chủ khác mà chúng tôi đang sử dụng. Cảm ơn!

Cập nhật: Không may mắn với việc biên dịch lại JAR thành 1.6 hoặc 1.7 và khớp với JDK. Ngoài ra, tại sao trên thế giới, một phiên bản Java mới hơn lại phá vỡ một phiên bản biên dịch cũ hơn?

Câu trả lời:


159

Điều này xảy ra khi bạn nhầm lẫn bằng cách nào đó chính java. Bạn đang cố chạy một máy ảo java 6 trong đó nó tìm thấy JRE 7. Nó có thể hiển thị sự cố này ngay cả khi bạn chỉ nhập dòng lệnh javahoặc java -versiontrong một môi trường được định cấu hình sai. JAR không phải là vấn đề, ngoại trừ trường hợp rất khó xảy ra khi mã trong JAR đang tìm kiếm trong Windows Registry cho điều đó (có thể không phải là trường hợp của bạn).

Trong trường hợp của tôi, tôi đã có java.exe, javaw.exejavaws.exetừ Java 6 trong Windows/System32thư mục (không biết làm cách nào mà nó ở đó). Phần còn lại của JDK và JRE được tìm thấy trong PATH bên trong C:\Java\jdk_1.7.0\bin. Giáo sư!


62
Đối mặt với vấn đề tương tự nhưng với Java 8 sau khi gỡ cài đặt giống nhau. Đã khắc phục sự cố bằng cách xóa java.exe, javaw.exe và javaws.exe có trong Windows / System32. Thực sự kỳ lạ ngay cả tôi không biết làm thế nào nó đến đó.
C Deepak

2
Cảm ơn đã thông báo, nó sẽ giúp. JDK 1.7 so với JDK 1.8 trong trường hợp của tôi.
daoway

7
Đối với người x86 !! Tôi ban đầu cài đặt 1.8 jre vài tháng trước và muốn 1.8 sdk. java.exe, javaw.exejavaws.exeđược lưu trữ dưới Windows/SysWOW64. Ngoài ra đối với một số lý do khi tôi cài đặt 1.8 SDK nó được cài đặt java.exe, javaw.exejavaws.exedưới C:/ProgramData/Oracle/Java/javapath. Không biết tại sao, nhưng tôi đã xóa chúng và java -versionvẫn hoạt động.
Sáng

1
System32 là chìa khóa cho tôi. Tôi đã đảm bảo rằng javapath có phiên bản phù hợp và các biến môi trường của tôi được đặt đúng cách ... không có gì hoạt động cho đến khi tôi sửa giao dịch System32 đó. Tất cả phải ở trên cùng một trang.
BK

2
xóa java.exe, javaw.exe và javaws.exe có trong indows / System32 khắc phục sự cố cho tôi. Cảm ơn @C Deepak
Tahir Jilani

59

Vừa gặp lỗi tương tự khi cài đặt java 8 (jdk & jre) trên hệ thống đã chạy Java 7.

Lỗi: Khóa đăng ký 'Software \ JavaSoft \ Java Runtime

Môi trường '\ CurrentVersion' có giá trị "1.8", nhưng "1.7" là bắt buộc.

Lỗi: không thể tìm thấy java.dll Lỗi: Không thể tìm thấy Môi trường thời gian chạy Java SE.

Môi trường của tôi đã được thiết lập đúng cách (Đường dẫn & java_home được xác định chính xác), nhưng vấn đề phát sinh từ cách hoạt động của trình cài đặt Java trước 8, đó là họ đã sử dụng để sao chép ba tệp thực thi (java.exe, javaw.exe & javaws.exe ) vào thư mục hệ thống Windows. Chúng vẫn còn trừ khi bị ghi đè bởi cài đặt trước 8 mới.

Tuy nhiên, trình cài đặt Java 8 thay vào đó tạo các liên kết tượng trưng trong một thư mục mới, C: \ ProgramData \ Oracle \ Java \ javapath, trỏ đến vị trí thực tế của JRE 8.

Điều này có nghĩa là bạn sẽ thực sự chạy 7 exes cũ nhưng sử dụng 8 DLL mới.

Vì vậy, giải pháp đơn giản là xóa 3 Java exes, như trên, khỏi thư mục hệ thống windows.

Nếu bạn đang chạy Java 32-bit trên Windows 64-bit, các exes sẽ nằm trong Windows \ SysWOW64, nếu không thì trong Windows \ System32.


Đây là một giải pháp hiệu quả, tôi đã đối mặt với vấn đề tương tự và điều này đã giải quyết được nó.
Sagar D

Đây là một giải pháp tốt hơn nhiều ... ít nhất là đối với tôi. Cảm ơn.
cbmeeks

28

Tôi đã xóa tệp java tại windows / system32 và tôi cũng đã xóa c: \ ProgramData \ Oracle \ Java \ javapath khỏi biến PATH, vì có 3 liên kết tượng trưng cho tệp java 1.8.

Tôi đã có JDK 1.7 trong biến% JAVA_HOME% và java1.7 / bin trong PATH.

PS1: Vấn đề của tôi là giữa Java 1.7 và Java 1.8.

PS2: Tôi không thể thêm điều này làm bình luận cho câu trả lời của Victor vì tôi chưa đủ điểm.


3
Vấn đề: Tôi gặp phải vấn đề 1.7 & 1.8 trong khi cố gắng sử dụng sencha cmd. Giải pháp: Tôi đã thêm đường dẫn jdk1.7 / bin trong biến môi trường% PATH% & loại bỏ các tệp java (java.exe, javaw.exe, javaws.exe) khỏi thư mục c: / windows / system32. Sự cố đã được giải quyết :)
saurabh

3
toàn bộ f *** Vấn đề là X: \ Windows \ SysWOW64 và X: \ Windows \ System32 java * .exe .. một khi loại bỏ tất cả đã làm việc một lần nữa ..
thiagoh

17

Trong menu START, gõ "regedit" để mở trình chỉnh sửa Registry

Đi tới "HKEY_LOCAL_MACHINE" trên trình đơn cây / trình khám phá sổ đăng ký phía bên trái

Nhấp vào "SOFTWARE" trong sổ đăng ký "HKEY_LOCAL_MACHINE"

Nhấp vào "JavaSoft" trong sổ đăng ký "PHẦN MỀM"

Nhấp vào "Java Runtime Environment" trong danh sách đăng ký "JavaSoft" tại đây, bạn có thể thấy các phiên bản java khác nhau đã cài đặt

Nhấp vào "Java Runtime Environment" - Ở phía bên phải, bạn sẽ nhận được 4-5 hàng. Vui lòng chọn "CurrentVersion" và nhấp chuột phải (chọn tùy chọn sửa đổi) Thay đổi phiên bản thành "1.7"

Bây giờ điều kỳ diệu đã được hoàn thành


4

Tôi không biết liệu có ai vẫn đang theo dõi chủ đề này hay không, nhưng gần đây tôi đã gặp sự cố này khi cố khởi chạy ActiveMQ 5.10 dưới dạng dịch vụ Windows.

Tôi chưa đặt đường dẫn JAVA_HOME. Tôi đã cài đặt Java 6 và Java 7, nhưng phiên bản mặc định là v7. (tức là nếu tôi đã mở một cửa sổ lệnh và nhập "java -version").

Đây là nơi manh mối - "java -version" trả về "Java HotSpot (TM) 64-Bit Server VM (bản dựng 23.1-b03, chế độ hỗn hợp)" nhưng tôi đã cài đặt dịch vụ Win32 ...

Hóa ra là nếu bạn sử dụng trình bao bọc Win32 trên máy 64-bit, bằng cách nào đó, nó sẽ quyết định sử dụng một phiên bản Java khác ...

Vì vậy, cách khắc phục của tôi là gỡ cài đặt phiên bản 32-bit của trình bao bọc và cài đặt phiên bản 64-bit. ác cảm trên máy của tôi; tôi đoán chỉ là thói quen ... Nhưng may mắn thay, cuối cùng tôi đã giải quyết được vấn đề ...


1
Bạn có thể gặp phải sự cố này nếu bạn đã cài đặt cả phiên bản Java 32 và 64 bit và bản cập nhật tự động (hoặc trong trường hợp của tôi là buộc công ty) chỉ cập nhật 1 trong số chúng. Gỡ cài đặt tất cả các phiên bản Java và cài đặt lại cả 32 và 64 bit sẽ giải quyết được.
DannyMeister

0

Đối với Win7 của tôi

Nghịch lý là java.exe và javaw.exe trong thư mục System32. Mở thư mục đó, tôi không thể nhìn thấy chúng nhưng bằng cách sử dụng tìm kiếm trong menu Bắt đầu, tôi nhận được liên kết đến các tệp đó, đã xóa chúng. Tiếp theo searsh đã cung cấp cho tôi liên kết đến các tệp từ JAVA_HOME

ma thuật )


-1

Thay đổi thành thư mục với đúng, java.exetức là chuyển đến phiên bản JDK cần thiếtjava.exe

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

Chạy java.exe từ thư mục này, nó được ưu tiên hơn các cài đặt đăng ký và $ PATH.

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

-2

Tôi đã giải quyết vấn đề này bằng cách gỡ cài đặt Java 1.8


-3

Bình được biên soạn để 1.6 tuân thủ. Đó là lý do tại sao bạn gặp lỗi này. Hai giải pháp:
1) Sử dụng Java 1.6

HOẶC LÀ

2) Biên dịch lại bình để phù hợp với môi trường của bạn 1.7


Tôi thực sự đã làm cả hai, nhưng hãy để tôi sao lưu một chút. JAR thực sự đang được chạy qua C # GUI. Bản thân JAR chạy qua dòng lệnh, nhưng không chạy qua GUI. Tôi đang nghĩ nó có thể là một JAR khác trong JAR mà tôi đang chạy (liên quan đến việc chạy GUI). Đây có thể là trường hợp? Đó là một tệp JAR lồng nhau đã được biên dịch thành 1.6?
Bryan A

Điều này nghe có vẻ không thể tin được. Các phiên bản Java tương thích trở xuống; mã được biên dịch cho / trên JDK 6 sẽ hoạt động trên Java 7 mà không cần biên dịch lại hoặc sửa đổi.
Jesper

@Jesper Tôi có thể nhầm lẫn điều này với một vấn đề tương tự mà tôi thường thấy trong Eclipse.
Woot4Moo

1
@Jesper đó là lý do tại sao tất cả điều này không có ý nghĩa đối với tôi. Mọi thứ tôi tìm thấy đều liên quan đến phiên bản JAR mới chạy trên Java cũ như 1.6 với JRE 1.5. Nhưng vấn đề này có vẻ ngược.
Bryan A

-3

Sử dụng regedit, xóa các mục tương ứng với java 7. Nó sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.