JRE 1.7 - java sürümü - döndürür: java / lang / NoClassDefFoundError: java / lang / Object


135

Herhangi bir java uygulamasını çalıştırırken veya sadece 'java' çalıştırırken jvm başarısız olur:

VM
java / lang / NoClassDefFoundError başlatılırken hata oluştu : java / lang / Object

İşte yanlış cevapların bir listesi :

  1. / Bin dizini de dahil olmak üzere doğru Java giriş dizini genel PATH üzerindedir

  2. JAVA_HOME doğru şekilde ayarlandı

  3. Java -fullversion works komutunu çalıştırma

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
  4. / Usr / java içindeki sembolik bağlantılar doğru java kurulumunu gösterir

  5. Sistemi oluştururken herhangi bir 'varsayılan' java yüklemedim

  6. java -version başarısız ... yukarıdaki ile aynı hata

  7. Java kurulumunun dizin yapısının altından komutlar vermek de işe yaramıyor

  8. Bu 64 bit için 64 bit java

Herhangi bir fikir?


2
Sorunun yüklenirken var gibi görünüyor rt.jargerektirdiği dosyayı, JVMyükleme sırasındaJRE
Bhavik Ambani

belki izinle ilgili bazı sorunlar?
Mark Bramnik

eksik dosyaları / dosya izinlerini görmek için truss / strace komutunu çalıştırın
Jayan

inbytebg.com/techblog/?p=189 , ilk yorumda yükleyiciyi düzeltmek için bir hile hilesi var
Sebastian

Yanıtlar:


186

Bu sorun, yanlış bir Java yüklemesinden kaynaklanır.

Olasılık 1

NOT: Bu senaryo yalnızca Java 8 ve öncesi için geçerlidir. Java 9'dan başlayarak, JRE farklı yapılandırılmıştır. rt.jar ve arkadaşları artık mevcut değil ve Pack200 artık kullanılmıyor.

Java standart kütüphane gibi çeşitli JARs, bulunan rt.jar, deploy.jar, jsse.jarvb JRE paketlenmiş edildiğinde, bu kritik JAR dosyaları ile sıkıştırılmış pack200 gibi saklanan rt.pack, deploy.pack, jsse.packvb Java yükleyici sıkıştırmayı onlara gerekiyordu. Bu hatayı yaşıyorsanız, görünüşe göre bu olmadı.

JRE'lerin ve klasörlerin unpack200tüm .packdosyalarında el ile çalıştırmanız gerekir .lib/lib/ext/

pencereler

Bir .packdosyayı açmak için (örneğin rt.pack), çalıştırın:

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

Tüm .packdosyaları JRE kök çalışmasından özyineli olarak açmak için :

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

* nix

Bir .packdosyayı açmak için (örneğin rt.pack), çalıştırın:

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

Tüm .packdosyaları JRE kök çalışmasından özyineli olarak açmak için :

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

Olasılık 2

Java'yı başka bir şekilde yanlış yüklediniz. Belki yönetici hakları olmadan yüklediniz veya yükleyiciden dosyaları çıkarmaya çalıştınız. Yükleyici ve / veya daha fazla ayrıcalık ile tekrar deneyin. Veya yükleyiciyi kullanmak istemiyorsanız .tar.gzbunun yerine Java paketini kullanın.


2
Bu bir Solaris sorusu, Windows değil.
Robin Kanters

1
Java linux arşiv dosyasını indirip kurulum komut dosyalarını kullanmak istemiyorsanız bu çözüm yardımcı oldu.
PotOfTea

23
@Robin Kanters bu kesin sorun / hata mesajı, belirtileri ve düzeltmek için platformlar agnostik, Bu bir Java RE soru, Solaris değil.

1
java bazı otomatik güncelleme yaptıktan sonra pencerelerde bu sorunu olması onaylayın
Lassi Kinnunen

5
Her zaman sadece kullanıyorum for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(Belki bir gün yolu biraz daha sağlam hale getireceğim, böylece yolu manuel olarak değiştirmek zorunda değilim, ama sonra tekrar, genellikle .gzonları paketlemeyen JRE'nin sürümünü kullanıyorum . )
Synetech

31

* Nix işletim sistemindeki Java 8 için <jdk root>/jre/lib(benim için /usr/java/jdk1.8.0_05/jre/lib) öğesine gidin . Bu dizinden yürütün:

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

Durumunda sürüm sorunlarını önlemek için aynı kullanmak, başka JRE yüklü unpack200olduğu sen düzeltiyoruz JRE ile gemi - komut satırından, kullanım gelen vardır ../../bin/unpack200(benim için bu genişlediğinde /usr/java/jdk1.8.0_05/bin/unpack200), sadece unpack200.


3
Geliştirmek için bazı paketleri "<jdk1.8_root>/lib" ../bin/unpack200 tools.pack tools.jar"<jdk1.8_root>/jre/lib/ext" ../../bin/unpack200 jfxrt.pack jfxrt.jar ../../bin/unpack200 localedata.pack localedata.jar
açmanız gerekiyor

El ile çıkarılan bir
JDK'dan

Benim durumumda sorun buydu. Ubuntu 18.04 kullanıyorum. Teşekkür ederim!
Boncho Valkov

13

64 bit mimari için hem 32 bit sürümünü hem de jre'nin 64 bit sürümünü yüklemeniz gerekir (rt.jar olarak mimariden bağımsız dosyalar yalnızca 32 bit sürümüne dağıtılır).

Global PATH ortam değişkenine doğru java yürütülebilir dosyasını eklemeye dikkat etmeyi unutmayın.


3
Bunu nereden buldun architecture independent files as rt.jar are distributed only in the 32-bin version?
Aleksandr M

Dağıtımın içeriğini inceledim
Tommaso

+1 Evet, haklısın. rt.jar, solaris 64 bit için jre paketine dahil değildir.
Aleksandr M

3
Buna eklemek için - SmartOS'a manuel kurulum yaparken bununla karşılaştık. Blogs.oracle.com/thefield/entry/solaris_11_jdk_installation adresinde (çoğunlukla) bulunan talimatları izleyin;
Khushil

Jdk-7u79-solaris-sparcv9.tar.Z ve jdk-7u79-solaris-sparc.tar.Z paketlerini kurdum. Şimdi çalışıyor gibi görünüyor. Ty.
Alex Pi

11

Sabırsız insanlar için Hızlı Çözüm ;) Windows makinelerinde şunu deneyin: C:\Windows\System32Dizine gidin ve silin java.exe(veya yeniden adlandırın java.exe.old).

En az 1.6 olduğundan java.exe, Windows dizininde bir olmamalıdır . Varsa, bir şeyden artakalan.

Biraz daha okuma:

2012'den gelen bir sorunun henüz onaylanmış bir cevabı olmadığına gerçekten şaşırdım ve 2015'te Win 7 32 Bit İşletim Sistemimde aynı sorunla karşılaştım!

Peki ne oldu?

Temel olarak, her şey iyi çalışıyordu, H2 veritabanını indirdim ve başlatmaya çalıştığımda H2 Console (Command Line):

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

Bu soruyu buldum ve aynı semptomları doğrulayabildim:

JAVA_HOME doğru şekilde ayarlandı:

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

java -versionbaşarısız olur, java --fullversioniyi çalışır:

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

ÇÖZÜM:C:\Windows\System32 Dizine gidin ve java.exedosyayı gerçekten yeniden adlandırdım !!!!

Şimdi anladım:

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)

ve iyi H2 Console (Command Line)çalışıyor!

Krediler bu forumdaki son mesaja gider: https://bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/


Ben de bu sorunla karşı karşıyayım, ama senin durumda java'nın eski bir sürümünü kullanıyorsun gibi görünüyor. 1.6.0_26! = 1.6.0_45, eski sürümünüzde muhtemelen sorun yoktur.
Centimane

İyi tespit! JDK 1.6.0_26 yüklü ve bu "yeni" sürümü Windows System32 klasöründen geldi. Her ikisi de PATH ortam değişkeninde ve aslında Windows tarafından sağlanan java çalışma zamanını kullanmak istemiyorum. Bu nedenle, onu silmek sorunu çözdü. Belki PATH'nizde de iki java çalışma zamanı var?
iaforek

Benim için yükleme rt.jar eksik (java.lang.Object nerede budur). Ne yazık ki kickstart RPM yüklediğinizde rt.jar eksik, ama orada sonra yüklerseniz, komik bir sorun var.
Centimane

RPM'lerde size yardım edemem. Bunun için üzgünüm.
iaforek

4
Benim için java in sembolik bağlantıları C:\ProgramData\Oracle\Java\javapathsoruna neden oluyordu. PATH ortam değişkenini değiştiriyorum ve şimdi çalışıyor.
WhiteKnight

10

Bugün yeni JDK indirdim (1.8.0.73) başladı c:> java.exeve rezil oldu:

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

Çalışma çözümümü burada paylaşmak istedim.

jdk\binKlasöre cd'ied zaman , Java iyi çalışacaktı, bu yüzden olduğunu biliyordum PATH. Bunu kanıtlamak PATHiçin sadece \jdk\binCMD'ye gittim ve işe yaradı.

Yani, çatışmaya neden olan klasörlerden PATHbirinin sahip java.exeolduğunu düşündüm. Anlaşıldığı üzere, öyleydi C:\>ProgramData\Oracle\Java\javapatho tutan sembolik çalıştırılabilirlerine.

java.exeişaret ediyordu jre\bin. Ben başladığımda dosya bozuk, \jre\bin\java.exeaynı hata. Bingo. JRE yazılımını yeniden yükledim ve sorun ortadan kalktı. Mutlu kodlama ...


8

Büyük olasılıkla kurulumunuzda java.lang.Object sınıf dosyasına sahip olan rt.jar adlı bir dosya eksik. Yükleme dosyalarınızı vb. Kontrol edin.

Özellikle, 64 bit dahili olmayan bir 32 bit kurulumun üzerine bindiğini (veya "yanında" yüklediğini) unutmayın. Başka bir deyişle, tamamen çalışan bir 64 bit kurulum elde etmek için, önce 32 bit kurulumu çalıştırmalı ve 64 bit kapasiteli bir makineniz varsa bunu 64 bit kurulumla izlemelisiniz ...

Bunun yerine sadece 64 bit kurulum yaparsanız, kurulumda belirli dosyaları kaçırırsınız ve yukarıdaki gibi hatalar alırsınız.


Cevabın bir parçası. Java SDK yolunuzun / lib ve lib / ext dizinindeki tüm * .pack dosyalarını açmanız gerekir. unpack200 size bu konuda yardımcı olabilir. Lütfen Rigg802'nin açıklamasına bakınız.
danger89

7

Windows 10'da, JRE 1.8 (8u121) ile aynı sorunla karşı karşıyaydım.
Yazıyor

java -version

cmd istemi geri döner

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

Diğer tüm komutları echo %JAVA_HOME%, echo %JRE_HOME%, echo %PATH%, java -fullversioncezası çalıştı.

Sistem yönetim panelindeki ortam değişkenlerine gidip, bağlantıyı PATH'den kaldırın ve bağlantıyı PATH C:\ProgramData\Oracle\Java\javapatholarak ayarladığınızdan emin olun C:\Program Files\Java Folder\bin.

Bundan sonra, C:\Windows\System32bir java.exedosya olup olmadığını kontrol edin ; doğruysa o dosyayı silin.

Şimdi yazmak java -versioniyi çalışıyor.


2
Windows güncellemesinden sonra aynı sorun var, ancak klasör yok C:\Program Files\Java Folder\bin. Bunun yerine kullanıyorum C:\Program Files\Java\jdk1.8.0_161\binama yine de bana yardım etmiyor. System32
Tom

6

JDK _uncompressing_yerine bununla yüklediğinizde, bu sorun oluşur _executing_.

Örnek olarak:

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

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

İlk senaryoda, çalışma zamanı kitaplıkları, rt.jar gibi, otomatik olarak sıkıştırılmamış hale gelmez (bu nedenle, .jar olanlar yerine rt.pack dosyalarını vb. Bulabilirsiniz).


4

Son zamanlarda aynı problemi yaşadım. Benim durumumda, Windows 7 makinem otomatik olarak java'yı indirdi ve C:\ProgramData\Oracle\Java\javapathjava'mı bozan yol ortamı değişkenimin başına eklendi . Yoldan kurtulduğumda işe yaradı.


3

java ikili üzerinde "chmod u + rx" yaparsanız ve çalıştırırsanız, jar dosyalarını açacak ve çalışma zamanı hataları olmadan bir java sürümü yapabilirsiniz


3

Yalnızca 64 bit'i yükleyemezsiniz, önce 32 bit'i yüklemeniz ve ardından 64 bit bileşenlerini eklemeniz gerekir.

Java.com adresinden:

JRE'yi 32 bit JVM'ye izin veren 64 bit bir sisteme yüklemek iki adımlı bir işlemdir: önce 32 bit JRE'yi yükleyin ve ardından 64 bit işlemler için ek desteği yükleyin. Dosya adları aşağıdaki gibidir:


OP 64-bit bir sistemde 32-bit JVM çalıştırmak hakkında bir şey söylemiyor ...?
wookie919

1

64 bit sürümü ilk olarak 32 bit yüklemeden yüklerseniz, diğer tüm sorunları gidermeye rağmen bu hata oluşur. Java 8u71 çalıştıran yepyeni bir Dell i7 64 bit Windows 10 Pro makinem var. % Path% ve% classpath% değerlerimi ortam değişkenlerine ekledikten ve diğer birkaç düzeltmeyi denedikten sonra 64 bit'i kaldırdıktan sonra 32 bit'i yükledikten sonra 64 bit'i yeniden yükledik.

Dosyalarınızın paketten çıkarılmaması gibi bazı sorunlar, olası nedenlerden dolayı belirtilmiştir, ancak sorunlara neden olabilir, ancak bunu yapmazsanız, diğer düzeltmeler çalışmaz.


1

Benim durumumda, bir windows 8.1 (yüklü jdk1.8.0_77) kullanıyorum, üç şey yaptım:

  1. Önceki jdks'leri sildim
  2. C: \ Windows \ System32 içindeki java.exe dosyasını yeniden adlandırdım
  3. PATH'ımda C: \ ProgramData \ Oracle \ Java \ javapath'ı da kaldırdım (echo% PATH%)

ve voila düzeltti!



0

Başka bir yanıt Linux durumunda tar.gz dosyasını kullanmak olabilir. Solaris platformu için de böyle bir şey var gibi görünüyor. Bu şekilde tüm dosyalar beklenen biçimde olacak ve paketten çıkarma sorunları olmayacak.


Bunun yerine tar.gz dosyasını kullanın?
Koray Tugay

Bunu yaklaşık 2,5 yıl önce cevapladığımı düşünürsek, java indirme sitesine bir göz atmak zorunda kaldım. Java'yı LinuX için .rpm gibi paketlenmiş olarak indirebilirsiniz. Sanırım daha önce denedim ve başım belaya girdi. Tar.gz dosyasını indirmek, içindeki tüm içeriği istenen dosya biçiminde olduğundan daha iyi çalıştı.
Rythmic

0

JDK 1.7.0_40 i586 ile x86_64 Linux kurulumlarında bir sorunum var. Sorunun, rpm'in Rigg802 tarafından belirtildiği gibi kavanoz dosyalarını açamaması olduğunu anladım (rpm işaretleme başarısını tamamlasa da):

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

/Lib/ld-linux.so.2 dosyası glibc-2.12-1.107.el6_4.4 tarafından sağlanır. jdk rpm'nin rpm derinlikleri arasında olmayan i686 .

Oracle JDK rpm ayrıca 32 bit libgcc-4.4.7-3.el6 sürümlerini gerektirir. kurulacak i686

Bu nedenle, öncelikle glibc-2.12-1.107.el6_4.4.i686 ve libgcc-4.4.7-3.el6.i686'yı yüklemektir.


Fedora 20 ile aynı sorunu yaşıyorum ve libgcc-4.8.2-7.fc20.i686'yı yükleyin, sorunu çözün. Txs
Boru

0

Benim için çalışan hızlı düzeltme:

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

0

Bu hatayı .rpm dosyasını ayıkladığımda oluştuğunu gördüm.

Daha sonra bu klasörü kaldırdım ve Linux 64 için jdk-7u79-linux-x64.tar.gz dosyasını indirdim ve bunun yerine bu dosyanın içeriğini çıkardım. Ayrıca: JAVA_HOME'u dışa aktar = / opt / java / jdk1.7.0_79 dışa aktarma JDK_HOME = / opt / java / jdk1.7.0_79 dışa aktarma PATH = $ {JAVA_HOME} / bin


0

Sadece jre'yi tekrar takın . Sorunumu çözdü. (SonarQube başlangıç ​​toplu işi jdk yüklendikten sonra bu hatayı vermeye başladı)


0

Kontrol paneline gidin, java ile ilgili şeyleri kaldırın (açılmışsa eclipse'yi kapatın), ardından java'yı yeniden kurun ve eclipse'i açın, projeleri temizleyin.


Downvote. OP açıkça değil , bir Windows platformunda.
peterh

0

Sadece bunu Solaris'te yaptım ve "java -version" un bile çalışmadığı aynı problemle karşılaştım. Dağıtımın 64 bit sürümlerinin 32 bit'ten daha küçük olmasının bir nedeni vardır. Gerçekten yukarıda belirtildiği gibidir:

Başka bir deyişle, tamamen çalışan bir 64 bit kurulum elde etmek için, önce 32 bit kurulumu çalıştırmalı ve 64 bit kapasiteli bir makineniz varsa bunu 64 bit kurulumla izlemelisiniz ...

Bu yüzden yükleyiciyi 32 bit için çalıştırdım:

sh jdk-6u131-solaris-sparc.sh

Sonra 64 bit için yükleyiciyi çalıştırdım:

sh jdk-6u131-solaris-sparcv9.sh

Bu bana seçim için birkaç java yürütülebilir dosyaları verir:

  • $ find. java adı
  • ./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

Sparcv9 java 64bit sürümleri ve 32bit JDK ile birlikte yüklendiğinde "-version" ile çalışır.

  • ./jdk1.6.0_131/bin/sparcv9/java-sürüm
  • Java sürümü "1.6.0_131"
  • Java (TM) SE Çalışma Zamanı Ortamı (derleme 1.6.0_131-b32)
  • Java HotSpot (TM) 64 Bit Sunucu VM (yapı 20.131-b32, karışık mod)

-Dan


Doğru, ama soru 2012'den ve OP'nin platformunu bilmiyoruz. O /usr/javaaçıkça OS / Linux gibi bir Linux olduğunu ifade ediyor . Solaris Java kurulumunun Java8'e kadar diğer işletim sistemlerinden farklı olması haklısınız. Temelde ilk 32bit paketi ve ardından 64bit paketini yüklemek zorunda üstünde o. Ancak geçmişte bu, 32 bit Java'nın Mac OS X'e benzer şekilde Solaris'te artık desteklenmediği.
peterh

0

Pencere 10'da C:\>ProgramData\Oracle\Java\javapath, env'de yürütülebilir dosyalar için sembolik bağlantıları olan bir yol zaten vardır .

Yeni bir sürüm yüklediğimde ve bunu ortam değişkenimden kaldırdığımda, tüm projem gösterilmeye başlıyor.

Pencere 10'da tutulma oksijeni kullanıyorum

Çözmek için: -

  1. Sadece C:\>ProgramData\Oracle\Java\javapathortam değişkeninden yolu kaldırdım ve yeni env'yi JAVA_HOME ve% JAVA_HOME% / bin olarak ekledim

  2. JDk'yi yönetici ayrıcalıklarıyla yeniden yüklerim (önceki JRE klasörünü sil)

  3. Tutulma projenizi açın> sağ tıklayın> Özelliklere Git> Kütüphanelerde> Şimdi JRE Sistem Kütüphanesini kaldırın> Kütüphane Ekle'ye tıklayın> "JRE Sistem Kütüphanesi" ni seçin> İleri'ye tıklayın> "Çalışma alanı varsayılan JRE (jre1.8.x_xxx)"> bitiş

Sorunum çözüldü :) Umarım sana yardımcı olur :)



0

Yani, her şeyi denemeye devam ettim ve sonunda java'yı kaldırdıktan sonra yeniden yüklemek sorunumu düzeltti.


0

kurulum sürümü için herhangi bir sorun varsa

C: \ Nerede JAVA

java konumunu toplayacaktır. Yüklemenizden başka bir yolunuz varsa, bu dosyaları kaldırın veya yeniden adlandırın (_backup olarak olabilir). java dosyasının uygun sürümünü alacaksınız.


-1

Aynı sorunla karşılaştım, iki java sürümünü yükledim, bu yüzden bu soruna neden oldu. Bunu onaylamak için kontrol panelinde java simgesini tıklayıp açmazsanız sorun aynıysa, sadece bir sürümü kaldırın. kekin parçası. Teşekkürler.


-2

Aynı sorunla karşılaştım: VM java / lang / NoClassDefFoundError: java / lang / Object başlatılırken hata oluştu

Sorunu çözmek için aşağıdaki adımları izleyin:

Adım 1. C: \ Program Files \ klasörüne gidin ve Java klasörünü arayın.

Adım 2. C: \ Program Files \ Java klasörünü silin.

Adım 3. Sürümünüz için 32 bit / 64 bit için yeni Jdk indirin http://www.oracle.com/technetwork/java/javase/downloads/index.html

4. Adım. JDK'yı yükleyin

Adım 5: Şimdi JAVA_HOME'u "C: \ Program Files \ Java \ jdk1.8.0_91" olarak ayarlayın

Adım 6: Komut istemini açın ve java -version yazın.

İşe yarıyor.


OP, JAVA_HOME'un burada sorun olmadığını belirtti
Alexandre Beaudet

Zaten jdk konumuna ayarlanmışsa, JAVA_HOME'u tekrar yapılandırmanıza gerek yoktur. Basitçe 5. Adımı atlayabilirsiniz. Eski JDK'yı silin ve daha yenisini yükleyin.
Mahesh Sutar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.