Câu hỏi Cách sửa lỗi java.lang.UnsupportedClassVersionError: Phiên bản major.minor không được hỗ trợ


Tôi đang cố gắng sử dụng Notepad ++ là công cụ biên tập tất cả-trong-một của tôi, chạy, biên dịch, v.v.

Tôi có JRE cài đặt, và tôi đã thiết lập biến đường dẫn của tôi vào thư mục ... / bin.

Khi tôi chạy "Hello world" trong Notepad ++, tôi nhận được thông báo này:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

Tôi nghĩ vấn đề ở đây là về các phiên bản; một số phiên bản Java có thể cũ hoặc quá mới.

  1. Làm thế nào để tôi sửa chữa nó?
  2. Tôi có nên cài đặt JDK và thiết lập biến đường dẫn của tôi cho JDK thay vì JRE không?
  3. Sự khác biệt giữa PATH biến trong JRE hoặc JDK?

1386
2018-04-30 11:28


gốc


bạn đã cài đặt jdk chưa? jre là môi trường Java RunTime, Để tạo các ứng dụng java, bạn cũng cần jdk - CyprUS
vâng tôi đã làm, và bây giờ đường dẫn của tôi biến điểm đến nơi jdk là. nhưng tôi vẫn có lỗi này "không được hỗ trợ phiên bản nhỏ 51.0" bạn có nghĩ rằng tôi nên cài đặt phiên bản cũ hơn của jdk? tôi đang sử dụng jdk 1.7.0 - ERJAN
Điều này đã xảy ra với tôi trên Mac OS X khi tôi gặp vấn đề do sự nhầm lẫn của Apple java 6 và Oracle java 7 tình hình trên OSX những ngày này. phiên bản ngắn: Biên dịch với JDK7, Chạy với JDK6, nhận được điều này. - Warren P
Trong java ClassName nên bắt đầu bằng chữ in hoa;) - Ashish Panery
Đối với El Captain, câu trả lời này đã sửa nó cho tôi: stackoverflow.com/a/34201991/1615594 - tsuz


Các câu trả lời:


Số phiên bản được hiển thị mô tả phiên bản của tệp JRE mà tệp lớp tương thích.

Các số chính được báo cáo là:

Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(Nguồn: Wikipedia)

Để khắc phục sự cố thực tế, bạn nên thử chạy mã Java với phiên bản Java JRE mới hơn hoặc chỉ định tham số đích cho trình biên dịch Java để hướng dẫn trình biên dịch tạo mã tương thích với các phiên bản Java trước đó.

Ví dụ, để tạo các tệp lớp tương thích với Java 1.4, sử dụng dòng lệnh sau:

javac -target 1.4 HelloWorld.java

Với các phiên bản mới hơn của trình biên dịch Java, bạn có thể nhận được một cảnh báo về đường dẫn lớp khởi động không được thiết lập. Thông tin thêm về lỗi này có sẵn trong bài đăng trên blog Cảnh báo javac mới để thiết lập một nguồn cũ hơn mà không có bootclasspath.


1774
2017-07-11 11:59



"Số phiên bản được hiển thị mô tả phiên bản nào nếu Java được sử dụng để biên dịch mã."  Không nó không.  Nó cho thấy phiên bản của JRE mà tệp lớp tương thích với. Sử dụng tùy chọn biên dịch chéo bạn có thể sử dụng 1,7 JDK để biên dịch mã với phiên bản lớp 1.1 (thông qua 1.7). - Andrew Thompson
Câu trả lời này không giải thích cách khắc phục nó như câu hỏi được hỏi? - Jonathan Leung
Đây là một giải pháp tốt để biên dịch một phiên bản trước từ Eclipse trực tiếp: stackoverflow.com/a/16345710/2091700 - Alphaaa
Trong dự án eclipse => Proerties => java compiler; đặt "mức tuân thủ trình biên dịch" cho phiên bản theo jre hoặc jdk của bạn. Đối với tôi, đó là 1,6 cho jre 1,6 - Sam
Điều này có thể xảy ra khi nguồn trình biên dịch được thiết lập không tuân thủ JRE / JDK hiện đang biên dịch. Ví dụ, tôi tìm thấy các giá trị dưới đây từ thư mục eclipse .settings, org.eclipse.jdt.core.compiler.compliance = 1.7, org.eclipse.jdt.core.compiler.source = 1.7, org.eclipse.jdt.core.compiler .codegen.targetPlatform = 1.7. Và trình biên dịch của tôi là 1.6.0_32. Vấn đề đã được giải quyết sau khi thay đổi các giá trị thành 1.6. Vấn đề bắt nguồn sau khi tôi sao chép dự án từ một không gian làm việc khác nơi tôi đang sử dụng JDK 1.7 :( - Gana


java.lang.UnsupportedClassVersionError xảy ra vì JDK cao hơn trong thời gian biên dịch và JDK thấp hơn trong thời gian chạy.


328
2018-06-28 06:48



+1: thay đổi liên kết tượng trưng này (/etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java) với phiên bản được sử dụng để biên dịch với javac đã giải quyết được - ezdazuzena
Làm cách nào tôi có thể thực hiện thay đổi ở trên? - Ankur Raiyani
Project -> Properties -> Java Compiler Kích hoạt các thiết lập cụ thể của dự án. Sau đó chọn Compiler Compliance Level để 1.7, 1.6 hoặc 1.5, xây dựng và thử nghiệm ứng dụng của bạn. - Vivek Kumar Ray
Biết thêm chi tiết xin vui lòng xem các liên kết vivekraicdac.blogspot.in - Vivek Kumar Ray
@ezdazuzena sử dụng sudo update-alternatives --config java làm như vậy. - Thorbjørn Ravn Andersen


Trong Eclipse, tôi chỉ cần đi đến lệnh menu Cửa sổ -> Sở thích -> Java -> Trình biên dịch và sau đó đặt "Mức tuân thủ trình biên dịch" thành 1.6.


111
2018-05-02 18:58



Trong nhật thực, đôi khi các khía cạnh dự án cũng cần được thay đổi thành phiên bản java thích hợp. - Bilal Mirza
Cảm ơn. Cần lưu ý rằng thiết lập môi trường thực thi mặc định của Eclipse (JRE đi trên đường dẫn xây dựng) là một tách rời cài đặt. Tôi đã thiết lập JRE nhưng không phải là mức tuân thủ trình biên dịch; điều này cố định nó. - wchargin
Và làm cách nào bạn rút ra kết luận từ thông báo lỗi rằng đây là nơi phù hợp để đặt tùy chọn? - Alexander
Có lẽ điều này: stackoverflow.com/questions/7073485/…có thể giúp nếu bạn đang sử dụng kiến ​​và nhật thực. - OuuGiii


Đừng lo, tôi đã giải quyết nó.

Nó thực sự là đơn giản - bạn cần phải cài đặt BOTH JRE / JDK với cùng một phiên bản.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

Và cứ thế.


55
2018-05-04 06:23



java 7 có thể xử lý 6 mà không có bất kỳ vấn đề quá. - damienix


Lỗi này có nghĩa là bạn đang cố tải một tệp "lớp" Java được biên dịch bằng phiên bản Java mới hơn bạn đã cài đặt.

Ví dụ: .class tập tin có thể đã được biên soạn cho JDK 7, và bạn đang cố gắng chạy nó với JDK 6.

Vì vậy, giải pháp là:

  • Nâng cấp thời gian chạy Java của bạn hoặc
  • Biên dịch lại lớp nếu bạn có nguồn, sử dụng trình biên dịch Java cục bộ của bạn (nếu bạn có).

    javac FileName.java

Đối với các nhà phát triển, điều này có thể xảy ra nếu một nhà phát triển khác kiểm tra tệp .class và họ đã có phiên bản mới hơn của java so với bạn!


37
2018-02-20 19:02



Ngoại trừ bên trong lọ. - Chris


Bạn đang cố chạy chương trình của mình bằng phiên bản Java không hỗ trợ phiên bản mà mã được biên dịch. Vì vậy, về cơ bản bạn phải biên dịch mã của bạn với một phiên bản cao hơn và cố gắng chạy nó bằng cách sử dụng một phiên bản thấp hơn.

Khi bạn đang nhận được

Unsupported major.minor version 51.0

và phiên bản 51,0 tương ứng với J2SE 7 bạn có thể biên dịch mã của bạn trong Java 7 và cố gắng chạy nó bằng một phiên bản thấp hơn. Kiểm tra cái gì java -versionhiển thị. Nó phải là phiên bản Java 7. Nếu không thực hiện các thay đổi thích hợp trong PATH / JAVA_HOME. Hoặc bạn có thể biên dịch với cùng phiên bản bạn đang cố chạy mã. Nếu cấu hình khó hiểu, bạn luôn có thể cung cấp đường dẫn tuyệt đối /home/user/jdk1.7.0_11/bin/javac và /home/user/jdk1.7.0_11/bin/java.


20
2017-10-01 08:51





Tôi đã có một tình huống tương tự trên Mac, và quá trình sau đây đã làm việc cho tôi:

Trong terminal, gõ

vi ~/.profile

Sau đó, thêm dòng này vào tệp và lưu

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

trong đó phiên bản là phiên bản trên máy tính của bạn, chẳng hạn như 1.7.0_25.

Thoát khỏi trình chỉnh sửa, sau đó nhập lệnh sau để làm cho nó trở nên hiệu quả

source ~/.profile 

Sau đó gõ java -version để kiểm tra kết quả

java -version 

Những gì là .profile tập tin?

.profile là một tập tin ẩn. Nó là một tệp tùy chọn cho hệ thống biết lệnh nào sẽ chạy khi người dùng có tệp hồ sơ của nó. Ví dụ: nếu tên người dùng của tôi là bruno và có tệp .profile trong / Users / bruno /, tất cả nội dung của nó sẽ được thực thi trong quá trình đăng nhập.

Nguồn: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515


17
2018-02-11 06:55





Trong menu của Eclipse Cửa sổ -> Sở thích -> Java -> Trình biên dịch kiểm tra cũng "Cấu hình các thiết lập cụ thể của dự án".

Nếu bạn stil có lỗi với cùng một phiên bản Java: cố gắng xóa thư mục xây dựng của dự án của bạn bằng tay. Sau đó khởi động lại Eclipse.


15
2017-08-06 10:24





Bạn có thể có một số thư viện JAR được biên dịch trong Java 7 và bạn chỉ có Java 6 là Java Runtime. Nó có thể xảy ra với một số thư viện mới.


13
2018-06-25 12:51





Vấn đề phổ biến nhất là định cấu hình sai của bạn JAVA_HOME biến sẽ trỏ đến thư viện Bộ phát triển Java phù hợp, nếu bạn đã cài đặt nhiều.

Để tìm vị trí thư mục Java SDK, hãy chạy các lệnh sau:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian / Ubuntu

Để kiểm tra xem bạn đã cài đặt java (openjdk) nào, hãy kiểm tra qua:

dpkg -l "openjdk*" | grep ^i

hoặc là:

update-java-alternatives -l

Để thay đổi nó, hãy sử dụng:

update-alternatives --config java

Tiền tố với sudo nếu được yêu cầu.

để chọn phiên bản java thay thế.

Hoặc kiểm tra xem có sẵn để cài đặt:

apt-cache search ^openjdk

Tiền tố với sudo nếu được yêu cầu.

Sau đó, bạn có thể cài đặt, ví dụ:

apt-get install openjdk-7-jre

Tiền tố với sudo nếu được yêu cầu.

Fedora, Oracle Linux, Red Hat

Cài đặt / nâng cấp gói thích hợp qua:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

Các java-1.7.0-openjdk gói chỉ chứa môi trường chạy Java. Nếu bạn muốn phát triển các chương trình Java, hãy cài đặt java-1.7.0-openjdk-devel gói.

BSD

Có một gói OpenJDK 7 trong bộ sưu tập FreeBSD Ports được gọi là openjdk7 mà có lẽ cần phải được cấu hình lại.

Xem: Trang wiki OpenJDK.

các cửa sổ

Chỉ cần cài đặt thư viện Bộ phát triển Java SE thích hợp từ Trang web của Oracle hoặc cài đặt

Jenkins

Nếu bạn gặp phải sự cố này với Jenkins, hãy xem:

Tuy nhiên chọn đúng phiên bản Java (mới hơn) với update-alternatives nên làm việc.


13
2018-04-04 12:16



Câu trả lời này làm việc cho tôi khi cố gắng sử dụng spark2-shell trên một máy chủ sau khi thêm dịch vụ tia lửa vào một cụm với cloudera. - Alter


Tôi đã phải đối mặt với cùng một vấn đề khi tôi làm việc với Kiến kịch bản để xây dựng ứng dụng của tôi.

tôi sử dụng Eclipse để phát triển ứng dụng của tôi, và tôi đã thay đổi phiên bản trình biên dịch trong các thuộc tính xây dựng của dự án. Nhưng điều đó không hiệu quả với tôi. Sau đó, tôi phát hiện ra rằng tôi có thể cung cấp phiên bản trình biên dịch trong tập lệnh Ant.

Tôi đã sửa đổi kịch bản lệnh Ant tại phần mà nó biên dịch các tệp Java.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

Điều này làm việc cho tôi để giải quyết vấn đề nhỏ không được hỗ trợ lớn.


11
2017-10-14 03:32