JRE 1.7 - versi java - pengembalian: java / lang / NoClassDefFoundError: java / lang / Object


137

Saat menjalankan aplikasi java apa pun, atau hanya 'java', jvm gagal:

Terjadi kesalahan selama inisialisasi VM
java / lang / NoClassDefFoundError: java / lang / Object

Berikut daftar jawaban yang salah :

  1. Direktori home Java yang benar, termasuk direktori / bin, ada di PATH global

  2. JAVA_HOME disetel dengan benar

  3. Menjalankan perintah java -fullversion bekerja

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
    
  4. Tautan simbolis di / usr / java semuanya mengarah ke instalasi java yang benar

  5. Saya tidak menginstal java 'default' ketika saya membuat sistem

  6. java -version gagal ... kesalahan yang sama seperti di atas

  7. Penerbitan perintah dari bawah struktur direktori instalasi java juga tidak berfungsi

  8. Ini adalah java 64-bit untuk 64-bit

Ada ide?


2
Tampaknya ada masalah dalam memuat rt.jarfile, yang diperlukan JVMpada saat memuatJRE
Bhavik Ambani

mungkin beberapa masalah terkait izin?
Mark Bramnik

jalankan truss / strace untuk melihat izin file / file yang hilang
Jayan

inbytebg.com/techblog/?p=189 , pada komentar pertama ada trik hex untuk menambal installer
Sebastian

Jawaban:


187

Masalah ini berasal dari instalasi Java yang tidak tepat.

Kemungkinan 1

CATATAN: Skenario ini hanya berlaku untuk Java 8 dan sebelumnya. Dimulai dengan Java 9, JRE memiliki struktur yang berbeda. rt.jar dan teman-teman sudah tidak ada lagi, dan Pack200 tidak lagi digunakan.

The Java perpustakaan standar yang terkandung dalam berbagai guci, seperti rt.jar, deploy.jar, jsse.jar, dll Ketika JRE yang dikemas, file-file JAR penting yang dikompresi dengan Pack200 dan disimpan sebagai rt.pack,deploy.pack , jsse.pack, dll Installer Java seharusnya uncompress mereka. Jika Anda mengalami kesalahan ini, tampaknya itu tidak terjadi.

Anda perlu menjalankan secara manual unpack200semua .packfile di JRE lib/danlib/ext/ folder .

Windows

Untuk membongkar satu .packfile (misalnya rt.pack), jalankan:

"%JAVA_HOME%\bin\unpack200" -r -v rt.pack rt.jar

Untuk mengekstrak semua .packfile secara rekursif , dari root JRE, jalankan:

for /r %f in (*.pack) do "%JAVA_HOME%\bin\unpack200.exe" -r -q "%f" "%~pf%~nf.jar"

* nix

Untuk membongkar satu .packfile (misalnya rt.pack), jalankan:

/usr/bin/unpack200 -r -v rt.pack rt.jar

Untuk mengekstrak semua .packfile secara rekursif , dari root JRE, jalankan:

find -iname "*.pack" -exec sh -c "/usr/bin/unpack200 -r -q {} \$(echo {} | sed 's/\(.*\.\)pack/\1jar/')" \;

Kemungkinan 2

Anda salah menginstal Java dengan cara lain. Mungkin Anda menginstal tanpa hak admin, atau mencoba mengekstrak file dari penginstal. Coba lagi dengan penginstal dan / atau lebih banyak hak istimewa. Atau, jika Anda tidak ingin menggunakan penginstal, gunakan .tar.gzpaket Java sebagai gantinya.


2
Ini adalah pertanyaan Solaris, bukan Windows.
Robin Kanters

1
Solusi ini membantu jika Anda baru saja mengunduh file arsip java linux, dan tidak ingin menggunakan skrip instalasi.
PotOfTea

23
@Robin Kanters karena masalah persis / pesan kesalahan ini, gejala dan cara memperbaikinya adalah platform-agnostik, Ini adalah pertanyaan tentang Java RE, bukan Solaris.

1
konfirmasi mengalami masalah ini di windows setelah java melakukan beberapa pembaruan otomatis
Lassi Kinnunen

5
Saya selalu hanya menggunakan for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(Mungkin suatu hari nanti saya akan membuatnya sedikit lebih kuat sehingga saya tidak perlu mengubah jalur secara manual, tetapi sekali lagi, saya biasanya hanya menggunakan .gzrilis JRE yang tidak mengemasnya. )
Synetech

30

Untuk Java 8 di OS * nix, buka <jdk root>/jre/lib(untuk saya /usr/java/jdk1.8.0_05/jre/lib). Dari direktori ini, jalankan:

../../bin/unpack200 rt.pack rt.jar
../../bin/unpack200 jsse.pack jsse.rar
../../bin/unpack200 charsets.pack charsets.jar

Untuk mencegah masalah versi jika Anda memiliki JRE lain yang diinstal, gunakan yang sama unpack200yang dikirimkan dengan JRE yang sedang Anda perbaiki - yaitu, dari baris perintah, gunakan ../../bin/unpack200(bagi saya, ini meluas ke /usr/java/jdk1.8.0_05/bin/unpack200), bukan hanya unpack200.


3
Untuk mengembangkan Anda harus membongkar beberapa paket lain: "<jdk1.8_root>/lib" ../bin/unpack200 tools.pack tools.jarin"<jdk1.8_root>/jre/lib/ext" ../../bin/unpack200 jfxrt.pack jfxrt.jar ../../bin/unpack200 localedata.pack localedata.jar
betontalpfa

Beberapa skrip dapat ditemukan di sini untuk membongkar semua stoples yang hilang dari JDK yang diekstrak secara manual: stackoverflow.com/questions/2203922/…
Kloe2378231

Ini adalah masalah dalam kasus saya. Saya menggunakan Ubuntu 18.04. Terima kasih!
Boncho Valkov

13

Tampaknya untuk arsitektur 64 bit Anda harus menginstal versi 32-bit dan versi 64-bit jre (file arsitektur independen sebagai rt.jar hanya didistribusikan dalam versi 32-bit).

Ingatlah kemudian untuk memperhatikan untuk memasukkan java yang benar dapat dieksekusi pada variabel lingkungan PATH global.


3
Dimana kamu mendapatkan itu architecture independent files as rt.jar are distributed only in the 32-bin version?
Aleksandr M

Saya baru saja memeriksa isi distribusinya
Tommaso

+1 Ya, Anda benar. rt.jar tidak termasuk dalam paket jre untuk solaris 64-bit.
Aleksandr M

3
Untuk menambahkan ini - kami menemukan ini saat melakukan penginstalan manual di SmartOS. Ikuti petunjuk yang ditemukan di blogs.oracle.com/thefield/entry/solaris_11_jdk_installation (untuk sebagian besar) dan Anda akan baik-baik saja.
Khushil

Saya menginstal kedua paket jdk-7u79-solaris-sparcv9.tar.Z dan jdk-7u79-solaris-sparc.tar.Z. Sekarang sepertinya berhasil. Ty.
Alex Pi

11

Solusi Cepat untuk orang yang tidak sabar;) Pada mesin Windows , coba ini: Buka C:\Windows\System32direktori dan hapus java.exe(atau ubah namanya menjadi seperti java.exe.old).

Sejak setidaknya 1.6, seharusnya tidak ada java.exedi direktori Windows. Jika ada, itu adalah sisa dari sesuatu.

Sedikit lebih banyak bacaan:

Saya benar-benar terkejut bahwa pertanyaan dari tahun 2012 belum memiliki jawaban yang disetujui dan saya sebenarnya mengalami masalah yang sama pada tahun 2015 di OS Win 7 32-Bit saya!

Jadi apa yang terjadi?

Pada dasarnya, semuanya berfungsi dengan baik, saya mengunduh database H2 dan ketika saya mencoba memulai H2 Console (Command Line)saya mendapat:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

Saya menemukan pertanyaan ini dan saya dapat memastikan gejala yang sama:

JAVA_HOME disetel dengan benar:

echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

java -versiongagal, sementara java --fullversionberfungsi dengan baik:

java -fullversion
java full version "1.6.0_45-b06"

SOLUSI: Buka C:\Windows\System32direktori dan hapus (saya benar-benar mengganti nama)java.exe file !!!!

Sekarang, saya mendapatkan:

java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

dan H2 Console (Command Line)bekerja dengan baik juga!

Kredit diberikan ke posting terakhir di forum ini: https://bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/


Saya juga menghadapi masalah ini, tetapi sepertinya dalam kasus Anda, Anda hanya menggunakan versi java yang lebih lama. 1.6.0_26! = 1.6.0_45, versi lama Anda mungkin tidak bermasalah.
Centimane

Terlihat bagus! Saya telah menginstal JDK 1.6.0_26 dan versi "yang lebih baru" berasal dari folder Windows System32. Keduanya berada dalam variabel lingkungan PATH dan saya sebenarnya tidak ingin menggunakan runtime java yang disediakan Windows. Oleh karena itu, menghapusnya menyelesaikan masalah. Mungkin Anda memiliki dua runtime java di PATH Anda juga?
iaforek

Bagi saya penginstalan saya tidak memiliki rt.jar (di situlah Anda menemukan java.lang.Object). Sayangnya ketika saya menginstal RPM dari kickstart itu kehilangan rt.jar, tetapi jika saya menginstal setelah itu ada, ada masalah lucu.
Centimane

Saya tidak dapat membantu Anda dengan RPM. Maaf soal itu.
iaforek

4
Bagi saya, tautan simbolis untuk java di C:\ProgramData\Oracle\Java\javapathmenyebabkan masalah. Saya mengubah variabel lingkungan PATH dan sekarang berhasil.
WhiteKnight

10

Saya mengunduh JDK baru hari ini (1.8.0.73) mulai c:> java.exedan mendapatkan yang terkenal:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

Saya hanya ingin membagikan solusi kerja saya di sini.

Ketika saya cd'ied ke dalam jdk\binfolder, Java akan berjalan dengan baik jadi saya tahu itu adalah file PATH. Saya mulai PATHhanya\jdk\bin di CMD untuk membuktikannya dan berhasil.

Jadi, salah satu folder di file PATH pasti java.exeyang menyebabkan konflik, pikir saya. Ternyata, C:\>ProgramData\Oracle\Java\javapathyang menampung symlink ke executable.

java.exemenunjuk ke jre\bin. File tersebut rusak, ketika saya mulai \jre\bin\java.exe- kesalahan yang sama persis. Bingo. Saya menginstal ulang JRE dan masalahnya hilang. Selamat membuat kode ...


8

Anda kemungkinan besar kehilangan file bernama rt.jar dalam instalasi Anda yang memiliki file kelas untuk java.lang.Object. Periksa file instal Anda, dll.

Secara khusus, perhatikan bahwa 64-bit intsaller overlay (atau menginstal "di sebelah") instalasi 32-bit yang ada. Dengan kata lain, untuk mendapatkan penginstalan 64-bit yang berfungsi penuh, Anda harus menjalankan penginstalan 32-bit terlebih dahulu, dan mengikutinya dengan penginstalan 64-bit jika Anda memiliki mesin berkemampuan 64bit ...

Jika sebaliknya Anda melakukan instalasi 64-bit, Anda akan kehilangan file-file tertentu dalam instalasi dan akan mendapatkan kesalahan seperti di atas.


Itu bagian dari jawabannya. Anda perlu membongkar semua file * .pack dalam direktori / lib dan lib / ext dari jalur java SDK Anda. unpack200 dapat membantu Anda dengan ini. Silakan, lihat komentar Rigg802.
hazard89

7

Di Windows 10, saya menghadapi masalah yang sama dengan JRE 1.8 (8u121).
Mengetik

java -version

prompt cmd kembali

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

Semua perintah lain, echo %JAVA_HOME%, echo %JRE_HOME%, echo %PATH%, java -fullversionbekerja dengan baik.

Pergi ke variabel lingkungan pada panel administrasi sistem, hapus link dari PATH C:\ProgramData\Oracle\Java\javapath, dan pastikan untuk menyetel di PATH link ke C:\Program Files\Java Folder\bin.

Setelah itu, periksa apakah C:\Windows\System32ada java.exefile; jika benar, hapus file itu.

Mengetik sekarang java -versionberfungsi dengan baik.


2
Saya memiliki masalah yang sama setelah pembaruan windows namun saya tidak memiliki folder C:\Program Files\Java Folder\bin. Sebaliknya saya gunakan C:\Program Files\Java\jdk1.8.0_161\bintetapi tidak membantu saya. Tidak ada file java.exe di folder System32
Tom

6

Masalah ini terjadi saat Anda menginstal JDK _uncompressing_olehnya, bukan JDK _executing_.

Contohnya:

unzip jdk-6u45-linux-x64.bin  (wrong)

sh ./jdk-6u45-linux-x64.bin   (right)

Dalam skenario pertama, pustaka runtime, sebagai rt.jar, tidak secara otomatis tidak terkompresi (dengan demikian, Anda dapat menemukan file rt.pack, dll., Bukan file .jar).


4

Saya mengalami masalah yang sama baru-baru ini. Dalam kasus saya, mesin windows 7 saya secara otomatis mengunduh java dan ditambahkan C:\ProgramData\Oracle\Java\javapathke awal variabel lingkungan jalan saya, yang mengacaukan java saya. Begitu saya menyingkirkannya dari jalur, itu berhasil.


3

jika Anda melakukan "chmod u + rx" pada biner java dan menjalankannya, itu akan membongkar file jar dan Anda dapat melakukan versi java tanpa kesalahan runtime


3

Anda tidak dapat menginstal hanya 64bit, Anda harus menginstal 32bit terlebih dahulu dan kemudian menambahkan komponen 64bit.

Dari java.com:

Menginstal JRE pada sistem 64-bit yang memungkinkan JVM 32-bit adalah proses dua langkah: pertama-tama instal JRE 32-bit dan kemudian instal dukungan tambahan untuk operasi 64-bit. Nama file tersebut adalah sebagai berikut:


OP tidak menyebutkan apa pun tentang menjalankan JVM 32-bit pada sistem 64-bit ...?
wookie919

1

Jika Anda menginstal versi 64-bit tanpa menginstal 32-bit terlebih dahulu, kesalahan ini akan terjadi meskipun semua masalah lainnya telah diperbaiki. Saya memiliki mesin Dell i7 64-bit Windows 10 Pro baru yang menjalankan Java 8u71. Setelah menambahkan% path% dan% classpath% saya ke variabel lingkungan dan mencoba beberapa perbaikan lainnya, mencopot pemasangan 64-bit, memasang 32-bit kemudian memasang ulang 64-bit memperbaikinya.

Beberapa masalah, seperti file Anda tidak diekstrak, dll. Yang telah disebutkan sebagai kemungkinan penyebab mungkin masih menyebabkan masalah, tetapi jika Anda tidak melakukannya, perbaikan lainnya tidak akan berfungsi.


1

Dalam kasus saya, saya menggunakan windows 8.1 (menginstal jdk1.8.0_77), saya melakukan tiga hal:

  1. Saya menghapus jdks sebelumnya
  2. Saya mengganti nama file java.exe di dalam C: \ Windows \ System32
  3. Saya juga menghapus C: \ ProgramData \ Oracle \ Java \ javapath di PATH saya (echo% PATH%)

dan voila berhasil memperbaikinya!



0

Jawaban lain bisa jadi dengan menggunakan file tar.gz sebagai gantinya dalam kasus Linux. Sepertinya ada hal seperti itu juga untuk platform solaris. Dengan cara ini semua file sudah dalam format yang diharapkan dan tidak akan ada masalah pembongkaran.


Apa maksud Anda menggunakan file tar.gz sebagai gantinya?
Koray Tugay

Mengingat saya menjawab ini sekitar 2,5 tahun yang lalu saya harus melihat kembali situs pengunduhan java. Di sana Anda memiliki pilihan untuk mendownload java baik sebagai paket seperti .rpm untuk LinuX. Saya pikir saya mencobanya sebelumnya dan mengalami masalah. Mengunduh file tar.gz malah bekerja lebih baik karena memiliki semua konten di dalamnya dalam format file yang diinginkan.
Rythmic

0

Saya memiliki beberapa masalah pada instalasi x86_64 Linux dengan JDK 1.7.0_40 i586. Saya menemukan bahwa masalahnya adalah rpm tidak dapat membuka file jar, seperti yang disebutkan oleh Rigg802 (meskipun rpm menyelesaikan menandai dengan sukses):

Unpacking JAR files...
        rt.jar...
/var/tmp/rpm-tmp.zLzkkb: /usr/java/jdk1.7.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
Error: unpack could not create JAR file:

        /usr/java/jdk1.7.0_40/jre/lib/rt.jar

File /lib/ld-linux.so.2 disediakan oleh glibc-2.12-1.107.el6_4.4. i686 yang tidak berada di antara deps rpm dari jdk rpm.

RPM Oracle JDK juga membutuhkan versi 32 bit dari libgcc-4.4.7-3.el6. i686 akan diinstal

Jadi, solusinya adalah menginstal glibc-2.12-1.107.el6_4.4.i686 dan libgcc-4.4.7-3.el6.i686 terlebih dahulu.


Saya memiliki masalah yang sama dengan Fedora 20 dan menginstal libgcc-4.8.2-7.fc20.i686 itu menyelesaikan masalah. Txs
Pipe

0

Perbaikan cepat yang berhasil untuk saya:

for file in $(find "$JAVA_HOME" -name "*pack")
do 
    unpack200 "${file}" "${test_file/%pack/jar}";
done

0

Saya menemukan bahwa kesalahan ini terjadi ketika saya mengekstrak file .rpm.

Saya kemudian menghapus folder itu dan mengunduh jdk-7u79-linux-x64.tar.gz untuk Linux 64 dan mengekstrak konten file ini sebagai gantinya. Juga: ekspor JAVA_HOME = / opt / java / jdk1.7.0_79 ekspor JDK_HOME = / opt / java / jdk1.7.0_79 ekspor PATH = $ {JAVA_HOME} / bin


0

Instal saja jre lagi . Itu hanya memecahkan masalah saya. (Kumpulan startup SonarQube mulai memberikan kesalahan ini setelah saya menginstal jdk)


0

Buka panel kontrol, hapus instalan hal-hal terkait java (tutup eclipse jika dibuka), lalu instal ulang java dan buka eclipse, bersihkan proyek.


Suara negatif. OP jelas bukan pada platform Windows.
peterh

0

Baru saja melakukan ini pada Solaris dan mengalami masalah yang sama di mana bahkan "java -version" tidak berfungsi. Ada alasan bahwa versi distro 64 bit JAUH lebih kecil dari 32-bit. Memang seperti yang disebutkan di atas:

Dengan kata lain, untuk mendapatkan penginstalan 64-bit yang berfungsi penuh, Anda harus menjalankan penginstalan 32-bit terlebih dahulu, dan mengikutinya dengan penginstalan 64-bit jika Anda memiliki mesin berkemampuan 64bit ...

Jadi saya menjalankan penginstal untuk 32-bit:

sh jdk-6u131-solaris-sparc.sh

Kemudian saya menjalankan penginstal untuk 64-bit:

sh jdk-6u131-solaris-sparcv9.sh

Ini memberi saya beberapa java executable untuk dipilih:

  • $ temukan. -nama java
  • ./jdk1.6.0_131/db/demo/programs/scores/java
  • ./jdk1.6.0_131/db/demo/programs/vtis/java
  • ./jdk1.6.0_131/bin/java
  • ./jdk1.6.0_131/bin/sparcv9/java
  • ./jdk1.6.0_131/jre/bin/java
  • ./jdk1.6.0_131/jre/bin/sparcv9/java

Java sparcv9 adalah versi 64bit dan bekerja dengan "-version" saat diinstal bersama JDK 32bit.

  • ./jdk1.6.0_131/bin/sparcv9/java -version
  • versi java "1.6.0_131"
  • Java (TM) SE Runtime Environment (build 1.6.0_131-b32)
  • Java HotSpot (TM) 64-Bit Server VM (build 20.131-b32, mode campuran)

-Dan


Benar, tapi pertanyaannya dari 2012 dan kami tidak tahu platform OP itu. Dia mengacu pada /usr/javajadi jelas Linux / Unix seperti OS. Anda benar bahwa penginstalan Java Solaris berbeda dari OS lain hingga Java8. Anda pada dasarnya harus menginstal terlebih dahulu paket 32bit dan kemudian paket 64bit di atasnya. Tapi itu semua di masa lalu sekarang karena Java 32-bit tidak lagi didukung di Solaris, mirip dengan Mac OS X.
peterh

0

Di jendela 10 sudah ada jalur yang ada di env karena C:\>ProgramData\Oracle\Java\javapathyang menampung symlink ke executable.

Ketika saya menginstal versi baru dan menghapusnya dari variabel lingkungan saya, semua proyek saya mulai menampilkannya.

Saya menggunakan oksigen gerhana di jendela 10

Untuk mengatasinya: -

  1. Saya baru saja menghapus jalur C:\>ProgramData\Oracle\Java\javapathdari variabel lingkungan dan menambahkan env baru sebagai JAVA_HOME dan% JAVA_HOME% / bin di jalur

  2. Saya menginstal ulang jdk dengan hak istimewa admin (hapus folder JRE sebelumnya)

  3. Buka proyek eclipse Anda> klik kanan> Goto Proprieties> In Libraries> Sekarang hapus JRE System Library> Klik Add Library> pilih "JRE System Library"> Klik Next> Pilih "Workspace default JRE (jre1.8.x_xxx)"> selesai

Masalah saya teratasi :) Semoga ini bisa membantu Anda :)



0

Jadi, saya terus mencoba semuanya dan akhirnya menginstal ulang java setelah menghapus instalannya memperbaiki masalah saya.


0

jika ada masalah untuk versi instalasi JAVA

C: \ Dimana JAWA

akan memberikan lokasi java yang diambilnya. Jika Anda memiliki jalur selain instalasi Anda, hapus file-file itu atau ganti namanya (mungkin sebagai _backup). Anda akan mendapatkan versi file java yang sesuai.


-1

Saya menghadapi masalah yang sama, saya telah menginstal dua versi java sehingga menyebabkan masalah ini. untuk mengonfirmasi buka ini dan klik ikon java di panel kontrol jika tidak terbuka maka masalahnya sama, cukup buka dan hapus satu versi. sepotong kue. Terima kasih.


-2

Saya menghadapi masalah yang sama: Terjadi kesalahan selama inisialisasi VM java / lang / NoClassDefFoundError: java / lang / Object

Ikuti langkah-langkah di bawah ini untuk menyelesaikan masalah:

Langkah 1. Buka C: \ Program Files \ dan cari folder Java.

Langkah 2. Hapus folder C: \ Program Files \ Java.

Langkah 3. Unduh Jdk baru untuk versi 32 bit / 64 bit Anda dari http://www.oracle.com/technetwork/java/javase/downloads/index.html

Langkah 4. Instal JDK

Langkah 5: Sekarang Setel JAVA_HOME ke "C: \ Program Files \ Java \ jdk1.8.0_91"

Langkah 6: Buka command prompt dan masukkan java -version.

Berhasil.


OP menyebutkan bahwa JAVA_HOME bukanlah masalah di sini
Alexandre Beaudet

Tidak perlu mengkonfigurasi JAVA_HOME lagi jika sudah disetel ke lokasi jdk. Anda dapat melewati Langkah 5. Hapus saja JDK lama dan instal yang lebih baru.
Mahesh Sutar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.