java.lang.UnsupportedClassVersionError: Nomor versi yang salah dalam file .class?

140

Saya mendapatkan kesalahan ini ketika saya menyertakan pustaka sumber terbuka yang harus saya kompilasi dari sumber. Sekarang, semua saran di web menunjukkan bahwa kode tersebut dikompilasi dalam satu versi dan dieksekusi di versi lain (baru lama). Namun, saya hanya memiliki satu versi JRE di sistem saya. Jika saya menjalankan perintah:

$ javac -version
javac 1.5.0_18

$ java -version
java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

dan periksa di Eclipse untuk properti perpustakaan java, saya dapatkan 1.5.0_18

Oleh karena itu, saya harus menyimpulkan sesuatu yang lain, internal ke kelas itu sendiri, melempar pengecualian ?? Apakah itu mungkin?

grmn.bob
sumber
2
apakah Anda memiliki versi kompilasi perpustakaan di tempat lain yang mungkin ada di classpath Anda terlebih dahulu?
Jeff Storey
Ide bagus, tapi tidak. Saya melakukan pemeriksaan dengan menggunakan 'find. -nama '* .jar' | xargs cari 'dari folder lib dengan JAR. Selain itu, saya tidak berpikir Eclipse menggunakan CLASSPATH? Ada saran bagus lainnya?
grmn.bob
cara menggunakan perintah find -name '* .jar' ini di cmd karena saya mencari untuk membangun kembali kode jre src lagi ... dan untuk itu saya perlu mem-boot cmd ini ..... javalobby.org/java/forums /t103334.html.....my jdk ada di C: \ Program Files \ Java \ jdk1.6.0_31
Learner

Jawaban:

185

Saya telah belajar bahwa pesan kesalahan seperti ini biasanya benar. Ketika itu tidak MUNGKIN (dalam pikiran Anda) seperti yang dikatakan kesalahan, Anda mencari masalah di area lain ... hanya untuk mengetahui beberapa jam kemudian bahwa pesan kesalahan asli memang benar.

Karena Anda menggunakan Eclipse, saya pikir Thilo benar. Alasan paling mungkin Anda mendapatkan pesan ini adalah karena salah satu proyek Anda sedang menyusun 1,6 kelas. Tidak masalah jika Anda hanya memiliki 1,5 JRE pada sistem, karena Eclipse memiliki kompiler sendiri (bukan javac), dan hanya membutuhkan 1,5 JRE untuk mengkompilasi 1,6 kelas. Mungkin aneh, dan pengaturan perlu dicentang untuk memungkinkan ini, tapi saya hanya berhasil melakukannya.

Untuk proyek yang dimaksud, periksa Properti Proyek (biasanya Alt + Enter), bagian Java Compiler. Berikut adalah gambar proyek yang dikonfigurasikan untuk mengkompilasi 1.6, tetapi hanya dengan 1,5 JRE.

masukkan deskripsi gambar di sini

Joshua McKinnon
sumber
Sepenuhnya setuju ... itu sebabnya saya bertanya, dalam komentar saya, pertanyaan tentang cara untuk menunjukkan. Saya tidak tahu tentang kelas internal Eclipse. Perpustakaan dikompilasi pada baris perintah dengan 'javac' dan diintegrasikan ke dalam proyek Eclipse saya. Saya akan mencoba mengkompilasi proyek saya dari baris perintah. Anda jelas telah memecahkan masalah ini di masa lalu dan saran Anda sangat fantastis.
grmn.bob
3
Jika Anda memiliki JDK (yang memiliki sumber), Anda harus dapat menambahkan beberapa breakpoints di Eclipse dan mudah-mudahan melihat kelas apa yang ingin dimuat. Cara termudah mungkin adalah breakpoint dalam konstruktor untuk UnsupportedClassVersionError (atau breakpoint Eclipse Exception, ikon 'J!'), Maka Anda dapat memeriksa bagaimana itu sampai di sana.
Joshua McKinnon
BAIK. Saya menemukan seorang ahli di gedung dan dia bisa mengarahkan Eclipse ke JRE yang sama dengan baris perintah saya. Saya kemudian dibangun kembali melawan 1,6 dan berlari melawan 1,6 dan semuanya bekerja. Jelas, saya salah karena tidak memiliki apa-apa selain 1,5. Dia menunjukkan kepada saya ke mana harus mencari. Terima kasih atas bantuannya - sekarang saya melanjutkan ke masalah saya berikutnya! :)
grmn.bob
2
Saya memiliki masalah yang sama. Kesalahan yang saya lakukan adalah saya menggunakan kompiler 1,5 JRE dan 1.6. Yang tidak menyelesaikan kesalahan konversi tidak didukung. Jadi saya menginstal 1,6 JRE di gerhana saya dan menggunakan kompiler 1.6. Kemudian semuanya mulai bekerja dengan baik.
Vanchinathan Chandrasekaran
1
Saya ingin memperbaiki ini untuk kedua kalinya, karena ini adalah kedua kalinya saya memiliki masalah, mencari, menemukan jawaban ini, dan sudah benar. > _ <
AlbeyAmakiir
9

Sudahkah Anda mencoba melakukan "bersih" penuh dan kemudian membangun kembali di Eclipse (Project-> Clean ...)?

Apakah Anda dapat mengkompilasi dan menjalankan dengan "javac" dan "java" langsung dari baris perintah? Apakah itu berfungsi dengan baik?

Jika Anda mengklik kanan pada proyek Anda, pergi ke "Properties" dan kemudian pergi ke "Java Build Path", apakah ada entri yang mencurigakan di bawah salah satu tab? Ini pada dasarnya adalah CLASSPATH Anda.

Di preferensi Eclipse, Anda mungkin juga ingin memeriksa ulang bagian "Installed JREs" di bagian "Java" dan pastikan cocok dengan apa yang Anda pikir seharusnya.

Anda pasti memiliki file .class basi yang terletak di suatu tempat atau Anda mendapatkan ketidakcocokan waktu kompilasi / run-time dalam versi Java yang Anda gunakan.

Brent Menulis Kode
sumber
ya (bersih penuh); belum mencobanya (proyek dari cmd line); mungkin / tidak (saya menghapus entri dari Eclipse "Java Build Path"); melakukan itu (JREs - di situlah saya mendapat versi #).
grmn.bob
5

Apakah Anda mengkompilasi dengan Eclipse? Ini menggunakan kompiler yang berbeda (bukan javac). Seharusnya tidak menghasilkan kesalahan ini (jika semuanya dikonfigurasi dengan benar), tetapi Anda dapat mencoba untuk mengkompilasinya dengan javac sebagai gantinya.

Jika itu memperbaiki masalah, cobalah untuk melihat apakah Eclipse memiliki beberapa pengaturan kompiler yang salah. Secara khusus memilikinya menargetkan Java 5.

Thilo
sumber
Itulah yang saya pelajari. Saya akan mencoba membangun dua potongan dengan cara yang sama (garis cmd dan / atau gerhana).
grmn.bob
1
Terima kasih Thilo, saya telah belajar banyak hari ini tentang Eclipse dan versi Java dan kelas. Dan sedikit tentang semut juga.
grmn.bob
2

Saya juga mendapat kesalahan yang sama. Alasan untuk itu saya mengkompilasi proyek menggunakan Maven. Saya punya JAVA_HOME menunjuk ke JDK7 dan karenanya java 1.7 sedang digunakan untuk kompilasi dan ketika menjalankan proyek saya menggunakan JDK1.5. Mengubah entri di bawah ini dalam file .classpath atau mengubah gerhana seperti pada tangkapan layar menyelesaikan masalah.

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

atau ubah dalam menjalankan configuarions eclipse as masukkan deskripsi gambar di sini

Vikky
sumber
1

Juga periksa semua file jar di proyek Anda yang telah dikompilasi untuk versi Java yang lebih tinggi. Jika ini adalah perpustakaan Anda sendiri, Anda bisa memperbaikinya dengan mengubah atribut versi target ke javac

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">
Jeshurun
sumber
0

Skenario lain di mana ini bisa terjadi adalah ketika Anda meluncurkan instance gerhana (untuk debug dll) dari gerhana host - dalam hal ini, mengubah tingkat proyek atau JRE perpustakaan di classpath proyek saja tidak membantu. Yang penting adalah JRE yang digunakan untuk meluncurkan lingkungan gerhana target.

Jay
sumber
0

Selalu periksa juga yang jelas. Saya mendapatkan kesalahan ini satu kali ketika saya secara tidak sengaja mengambil sumber daya yang salah untuk tindakan menambah dan menghapus server. Mudah untuk dilupakan.

James Drinkard
sumber
0

Menghapus file pengaturan khusus proyek (Eclipse workspace / folder proyek / .settings /) dari folder proyek juga akan dilakukan. Jelas, kita perlu melakukan pembersihan dan pembangunan proyek setelah dihapus.

pengguna3471219
sumber
0

mengubah proyek untuk menggunakan java 1.7: Agar ini berfungsi ikuti langkah-langkah berikut:

  • Ubah Tingkat Kepatuhan Penyusun
  • Ubah proyek Anda JRE / JDK ke tingkat yang sama (1,7 dalam kasus saya)
  • Lakukan perubahan yang sama di semua proyek yang dirujuk oleh proyek Anda
  • Ubah konfigurasi jalankan / debug Anda untuk menggunakan JRE / JDK (atau dari level yang sama)

Tidak bekerja

  • hapus proyek direktori Bin
  • Bersih
  • membangun kembali

Masih tidak bekerja?

di direktori proyek Anda: edit .settings / org.eclipse.jdt.core.prefs> pastikan level target Anda diterapkan

Semoga berhasil!

Li3ro
sumber
0

saya memecahkan masalah ini dengan mengubah jre yang diperlukan untuk server (dalam kasus saya adalah kucing jantan). Dari tab Server dalam gerhana, klik dua kali pada server (untuk membuka halaman untuk konfigurasi server), klik pada lingkungan Runtime, lalu ubah JRE diperlukan

ocrampico
sumber