JRE 1.7 - version java - renvoie: java / lang / NoClassDefFoundError: java / lang / Object

135

Lors de l'exécution d'une application java, ou simplement de «java», le jvm échoue:

Une erreur s'est produite lors de l'initialisation de la VM
java / lang / NoClassDefFoundError: java / lang / Object

Voici une liste de mauvaises réponses:

  1. Le répertoire de base Java correct, y compris le répertoire / bin, se trouve sur le PATH global

  2. JAVA_HOME est défini correctement

  3. L'exécution de la commande java -fullversion fonctionne

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
    
  4. Les liens symboliques dans / usr / java pointent tous vers l'installation Java correcte

  5. Je n'ai pas installé de java `` par défaut '' lorsque j'ai créé le système

  6. java -version échoue ... même erreur que ci-dessus

  7. L'exécution des commandes sous la structure de répertoires de l'installation java ne fonctionne pas non plus

  8. C'est java 64 bits pour un 64 bits

Des idées?

Tux Skywalker
la source
2
Il semble qu'il y ait un problème lors du chargement du rt.jarfichier, qui est requis par JVMau moment du chargementJRE
Bhavik Ambani
peut-être des problèmes liés à l'autorisation?
Mark Bramnik
exécutez truss / strace pour voir les fichiers / autorisations de fichiers manquants
Jayan
inbytebg.com/techblog/?p=189 , sur le premier commentaire, il y a une astuce hexadécimale pour patcher le programme d'installation
Sebastian

Réponses:

186

Ce problème provient d'une mauvaise installation de Java.

Possibilité 1

REMARQUE: ce scénario s'applique uniquement à Java 8 et versions antérieures. À partir de Java 9, le JRE est structuré différemment. rt.jar et ses amis n'existent plus et Pack200 n'est plus utilisé.

La bibliothèque standard Java est contenue dans divers fichiers JAR, tels que rt.jar, deploy.jar, jsse.jar, etc. Lorsque le JRE est emballé, ces fichiers JAR critiques sont compressés avec pack200 et stockés comme rt.pack, deploy.pack, jsse.pack, etc. Le programme d' installation de Java est censé Décompressez. Si vous rencontrez cette erreur, cela ne s'est apparemment pas produit.

Vous devez exécuter manuellement unpack200sur tous les .packfichiers dans les JRE lib/et les lib/ext/dossiers.

les fenêtres

Pour décompresser un .packfichier (par exemple rt.pack), exécutez:

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

Pour décompresser tous les .packfichiers de manière récursive , à partir de la racine JRE:

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

*rien

Pour décompresser un .packfichier (par exemple rt.pack), exécutez:

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

Pour décompresser tous les .packfichiers de manière récursive , à partir de la racine JRE:

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

Possibilité 2

Vous avez mal installé Java d'une autre manière. Peut-être avez-vous installé sans droits d'administrateur ou essayé d'extraire simplement des fichiers du programme d'installation. Réessayez avec le programme d'installation et / ou plusieurs privilèges. Ou, si vous ne souhaitez pas utiliser le programme d'installation, utilisez .tar.gzplutôt le package Java.

Rigg802
la source
2
C'est une question Solaris, pas Windows.
Robin Kanters
1
Cette solution a aidé si vous téléchargez simplement le fichier d'archive Linux Linux et que vous ne voulez pas utiliser de scripts d'installation.
PotOfTea
23
@Robin Kanters car ce problème / message d'erreur exact, ses symptômes et les moyens de le résoudre sont indépendants de la plate-forme. Il s'agit d'une question Java RE, pas de Solaris.
1
confirmez avoir ce problème sur Windows après que java ait effectué une mise à jour automatique
Lassi Kinnunen
5
J'utilise toujours juste for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(Peut-être qu'un jour je le rendrai un peu plus robuste pour ne pas avoir à changer manuellement le chemin, mais là encore, j'utilise généralement juste la .gzversion du JRE qui ne les contient pas. )
Synetech
31

Pour Java 8 sur un système d'exploitation * nix, accédez à <jdk root>/jre/lib(pour moi, /usr/java/jdk1.8.0_05/jre/lib). Depuis ce répertoire, exécutez:

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

Pour éviter les problèmes de version au cas où vous auriez installé un autre JRE, utilisez le même unpack200que celui fourni avec le JRE que vous corrigez - c'est-à-dire, à partir de la ligne de commande, utilisez ../../bin/unpack200(pour moi, cela s'étend à /usr/java/jdk1.8.0_05/bin/unpack200), pas seulement unpack200.

betontalpfa
la source
3
Pour développer, vous devez déballer d'autres paquets: "<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
Certains scripts peuvent être trouvés ici pour décompresser tous les
fichiers JAR
C'était le problème dans mon cas. J'utilise Ubuntu 18.04. Je vous remercie!
Boncho Valkov
13

Il semble que pour une architecture 64 bits, vous devez installer à la fois la version 32 bits et la version 64 bits de jre (les fichiers indépendants de l'architecture comme rt.jar ne sont distribués que dans la version 32 bits).

N'oubliez pas alors de faire attention à inclure l'exécutable Java correct dans la variable d'environnement globale PATH.

Tommaso
la source
3
Où avez-vous obtenu cela architecture independent files as rt.jar are distributed only in the 32-bin version?
Aleksandr M
Je viens d'examiner le contenu de la distribution
Tommaso
+1 Oui, vous avez raison. rt.jar n'est pas inclus dans le package jre pour solaris 64 bits.
Aleksandr M
3
Pour ajouter à cela, nous avons rencontré cela lors d'une installation manuelle sur SmartOS. Suivez les instructions trouvées sur blogs.oracle.com/thefield/entry/solaris_11_jdk_installation (pour la plupart) et tout ira bien.
Khushil
J'ai installé les deux packages jdk-7u79-solaris-sparcv9.tar.Z et jdk-7u79-solaris-sparc.tar.Z. Maintenant, il semble que cela fonctionne. Ty.
Alex Pi
11

Solution rapide pour les personnes impatientes;) Sur les machines Windows , essayez ceci: Allez dans le C:\Windows\System32répertoire et supprimez-le java.exe(ou renommez-le en quelque chose comme java.exe.old).

Depuis au moins 1.6, il ne devrait pas y avoir de java.exedans le répertoire Windows. S'il y en a, c'est un reste de quelque chose.

Un peu plus de lecture:

Je suis vraiment surpris qu'une question de 2012 n'ait pas encore de réponse approuvée et j'ai rencontré le même problème en 2015 sur mon système d'exploitation Win 7 32 bits!

Alors qu'est-il arrivé?

En gros, tout fonctionnait bien, j'ai téléchargé la base de données H2 et quand j'ai essayé de démarrer, H2 Console (Command Line)j'ai obtenu:

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

J'ai trouvé cette question et j'ai pu confirmer les mêmes symptômes:

JAVA_HOME est correctement défini:

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

java -versionéchoue, alors que java --fullversionfonctionne bien:

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

SOLUTION: Allez dans le C:\Windows\System32répertoire et supprimez le java.exefichier (j'ai en fait renommé) !!!!

Maintenant, je reçois:

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)

et H2 Console (Command Line)fonctionne très bien aussi!

Les crédits vont au dernier message de ce forum: https://bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/

iaforek
la source
Je suis moi aussi confronté à ce problème, mais il semble que dans votre cas, vous utilisez simplement une ancienne version de java. 1.6.0_26! = 1.6.0_45, votre ancienne version n'a probablement pas le problème.
Centimane
Bien repéré! J'ai installé JDK 1.6.0_26 et cette version "plus récente" est venue du dossier Windows System32. Les deux sont dans la variable d'environnement PATH et je ne veux en fait pas utiliser le runtime Java fourni par Windows. Par conséquent, sa suppression a résolu le problème. Peut-être avez-vous également deux runtimes Java dans votre PATH?
iaforek
Pour moi, mon installation manquait rt.jar (où vous trouvez java.lang.Object). Malheureusement, lorsque j'installe le RPM à partir de kickstart, il manque le rt.jar, mais si j'installe après qu'il soit là, un problème amusant à avoir.
Centimane
Je ne peux pas vous aider avec les RPM. Désolé pour ça.
iaforek
4
Pour moi, les liens symboliques pour java C:\ProgramData\Oracle\Java\javapathétaient à l'origine du problème. Je change la variable d'environnement PATH et maintenant cela fonctionne.
WhiteKnight
10

J'ai téléchargé le nouveau JDK aujourd'hui (1.8.0.73) c:> java.exeet j'ai obtenu le tristement célèbre:

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

Je voulais juste partager ma solution de travail ici.

Quand je suis entré dans le jdk\bindossier, Java fonctionnait bien, donc je savais que c'était le fichier PATH. Je me suis mis PATHà juste \jdk\binchez CMD pour le prouver et cela a fonctionné.

Donc, l'un des dossiers dans le PATHmust have avait java.exequi causait le conflit, ai-je pensé. En fait, c'est ce C:\>ProgramData\Oracle\Java\javapathqui contient des liens symboliques vers les exécutables.

java.exepointait jre\bin. Le fichier était corrompu, quand j'ai commencé \jre\bin\java.exe- exactement la même erreur. Bingo. J'ai réinstallé JRE et le problème a disparu. Bon codage ...

Le buteur
la source
8

Il vous manque probablement un fichier appelé rt.jar dans votre installation qui contient le fichier de classe pour java.lang.Object. Vérifiez vos fichiers d'installation, etc.

En particulier, notez qu'un intsaller 64 bits superpose (ou installe "à côté de") une installation 32 bits existante. En d'autres termes, pour obtenir une installation 64 bits entièrement fonctionnelle, vous devez d'abord exécuter l'installation 32 bits, puis suivre avec une installation 64 bits si vous avez une machine compatible 64 bits ...

Si à la place vous ne faites qu'une installation 64 bits, il vous manquera certains fichiers dans l'installation et vous obtiendrez des erreurs telles que celle ci-dessus.

user3213415
la source
Cela fait partie de la réponse. Vous devez décompresser tous les fichiers * .pack dans votre répertoire / lib et lib / ext du chemin de votre SDK java. unpack200 peut vous y aider. S'il vous plaît, voir le commentaire de Rigg802.
danger89
7

Sous Windows 10, j'étais confronté au même problème avec JRE 1.8 (8u121).
Dactylographie

java -version

l'invite cmd retourne

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

Toutes les autres commandes, echo %JAVA_HOME%, echo %JRE_HOME%, echo %PATH%, java -fullversiona bien fonctionné.

Accédez aux variables d'environnement sur le panneau d'administration système, supprimez de PATH le lien C:\ProgramData\Oracle\Java\javapathet assurez-vous d'avoir défini dans PATH le lien vers C:\Program Files\Java Folder\bin.

Après cela, vérifiez s'il C:\Windows\System32existe un java.exefichier; si vrai, supprimez ce fichier.

Taper maintenant java -versioncela fonctionne très bien.

Francesco Marchitelli
la source
2
J'ai le même problème après la mise à jour de Windows, mais je n'ai pas de dossier C:\Program Files\Java Folder\bin. Au lieu de cela je l'utilise C:\Program Files\Java\jdk1.8.0_161\binmais ça ne m'aide pas de toute façon. Il n'y a pas de fichier java.exe dans le dossier System32
Tom
6

Ce problème se produit lorsque vous installez le JDK par _uncompressing_lui à la place _executing_.

Par exemple:

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

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

Dans le premier scénario, les bibliothèques d'exécution, comme rt.jar, ne sont pas automatiquement décompressées (ainsi, vous pouvez trouver les fichiers rt.pack, etc. au lieu des fichiers .jar).

kdn
la source
4

J'ai eu le même problème récemment. Dans mon cas, ma machine Windows 7 a automatiquement téléchargé java et ajouté C:\ProgramData\Oracle\Java\javapathau début de ma variable d'environnement de chemin, ce qui a gâché mon java. Une fois que je me suis débarrassé de cela du chemin, cela a fonctionné.

développeur747
la source
3

si vous faites "chmod u + rx" sur le binaire java et que vous l'exécutez, il décompressera les fichiers jar et vous pourrez faire une version java sans erreurs d'exécution

Peter Nielsen
la source
3

Vous ne pouvez pas installer uniquement le 64 bits, vous devez d'abord installer le 32 bits, puis ajouter les composants 64 bits.

De java.com:

L'installation du JRE sur un système 64 bits qui autorise une JVM 32 bits est un processus en deux étapes: installez d'abord le JRE 32 bits, puis installez la prise en charge supplémentaire pour les opérations 64 bits. Les noms de fichiers sont les suivants:

Andrew Speer
la source
L'OP ne mentionne rien sur l'exécution de JVM 32 bits sur un système 64 bits ...?
wookie919
1

Si vous installez une version 64 bits sans installer au préalable 32 bits, cette erreur se produira malgré la résolution de tous les autres problèmes. J'ai une toute nouvelle machine Dell i7 64 bits Windows 10 Pro exécutant Java 8u71. Après avoir ajouté mon% path% et% classpath% aux variables d'environnement et essayé plusieurs autres correctifs, désinstaller 64 bits, installer 32 bits puis réinstaller 64 bits l'a corrigé.

Certains des problèmes, comme le fait de ne pas décompresser vos fichiers, etc., qui ont été mentionnés comme causes possibles peuvent toujours causer des problèmes, mais si vous ne le faites pas, les autres correctifs ne fonctionneront pas.

Bryan Robinson
la source
1

Dans mon cas, j'utilise un Windows 8.1 (installé jdk1.8.0_77), j'ai fait trois choses:

  1. J'ai supprimé les jdks précédents
  2. J'ai renommé le fichier java.exe dans C: \ Windows \ System32
  3. J'ai également supprimé C: \ ProgramData \ Oracle \ Java \ javapath dans mon PATH (echo% PATH%)

et le tour est joué!

Kashogi
la source
0

Une autre réponse pourrait être d'utiliser le fichier tar.gz à la place dans le cas de Linux. Il semble y avoir quelque chose comme ça également pour la plate-forme solaris. De cette façon, tous les fichiers seront déjà au format attendu et il n'y aura pas de problèmes de décompression.

Rythmique
la source
Que voulez-vous dire, utilisez plutôt le fichier tar.gz?
Koray Tugay
Compte tenu de ma réponse il y a environ 2,5 ans, j'ai dû jeter un coup d'œil sur le site de téléchargement java. Là, vous avez le choix de télécharger java soit sous forme de package comme .rpm pour LinuX. Je pense que je l'ai essayé avant et j'ai rencontré des problèmes. Le téléchargement du fichier tar.gz fonctionnait mieux à la place car il contenait tout le contenu dans le format de fichier souhaité.
Rythmic
0

J'ai un problème sur les installations Linux x86_64 avec JDK 1.7.0_40 i586. J'ai compris que le problème est que rpm ne peut pas décompresser les fichiers jar, comme mentionné par Rigg802 (bien que rpm termine le marquage du succès):

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

Le fichier /lib/ld-linux.so.2 est fourni par glibc-2.12-1.107.el6_4.4. i686 qui ne fait pas partie des deps rpm de jdk rpm.

Oracle JDK rpm nécessite également des versions 32 bits de libgcc-4.4.7-3.el6. i686 à installer

Ainsi, la solution de contournement consiste à installer d'abord glibc-2.12-1.107.el6_4.4.i686 et libgcc-4.4.7-3.el6.i686.

scrutari
la source
J'ai le même problème avec Fedora 20 et installez libgcc-4.8.2-7.fc20.i686 pour résoudre le problème. Txs
Pipe
0

Solution rapide qui a fonctionné pour moi:

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

J'ai constaté que cette erreur s'est produite lorsque j'ai extrait le fichier .rpm.

J'ai ensuite supprimé ce dossier et téléchargé jdk-7u79-linux-x64.tar.gz pour Linux 64 et extrait le contenu de ce fichier à la place. Aussi: export JAVA_HOME = / opt / java / jdk1.7.0_79 export JDK_HOME = / opt / java / jdk1.7.0_79 export PATH = $ {JAVA_HOME} / bin

user5974531
la source
0

Installez à nouveau le jre . Cela a simplement résolu mon problème. (Le lot de démarrage SonarQube a commencé à donner cette erreur après avoir installé jdk)

stratovarius
la source
0

Accédez au panneau de configuration, désinstallez les éléments liés à java (fermez eclipse si ouvert), puis réinstallez java et ouvrez eclipse, nettoyez les projets.

Ateeque Shaikh
la source
Voter contre. L'OP n'est clairement pas sur une plate-forme Windows.
peterh
0

Je viens de faire cela sur Solaris et j'ai rencontré ce problème identique où même "java -version" ne fonctionne pas. Il y a une raison pour laquelle les versions 64 bits de la distribution sont BIEN plus petites que les 32 bits. C'est en effet comme indiqué ci-dessus:

En d'autres termes, pour obtenir une installation 64 bits entièrement fonctionnelle, vous devez d'abord exécuter l'installation 32 bits, puis suivre avec une installation 64 bits si vous avez une machine compatible 64 bits ...

J'ai donc exécuté le programme d'installation pour le 32 bits:

sh jdk-6u131-solaris-sparc.sh

Ensuite, j'ai exécuté le programme d'installation pour le 64 bits:

sh jdk-6u131-solaris-sparcv9.sh

Cela me donne plusieurs exécutables java parmi lesquels choisir:

  • $ trouver. -nom 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

Les java sparcv9 sont les versions 64 bits et ils fonctionnent avec "-version" lorsqu'ils sont installés avec le JDK 32 bits.

  • ./jdk1.6.0_131/bin/sparcv9/java -version
  • version java "1.6.0_131"
  • Environnement d'exécution Java (TM) SE (build 1.6.0_131-b32)
  • VM serveur 64 bits Java HotSpot (TM) (build 20.131-b32, mode mixte)

-Dan

user7323228
la source
C'est vrai, mais la question date de 2012 et nous ne connaissons pas la plateforme de l'OP. Il fait référence à /usr/javaun système d'exploitation similaire à Linux / Unix. Vous avez raison de dire que l'installation Solaris de Java était différente de tout autre système d'exploitation jusqu'à Java8. Vous deviez essentiellement installer d'abord le package 32 bits, puis le package 64 bits par-dessus . Mais c'est tout dans le passé maintenant que Java 32 bits n'est plus pris en charge sur Solaris, comme pour Mac OS X.
peterh
0

Dans la fenêtre 10, il existe déjà un chemin dans env car il C:\>ProgramData\Oracle\Java\javapathcontient des liens symboliques vers les exécutables.

Lorsque j'installe une nouvelle version et la supprime de ma variable d'environnement, tout mon projet commence à l'afficher.

J'utilise l'oxygène d'éclipse dans la fenêtre 10

Pour le résoudre: -

  1. Je viens de supprimer le chemin C:\>ProgramData\Oracle\Java\javapathde la variable d'environnement et j'ai ajouté un nouvel env comme JAVA_HOME et% JAVA_HOME% / bin dans le chemin

  2. Je réinstalle le jdk avec les privilèges d'administrateur (supprime le dossier JRE précédent)

  3. Ouvrez votre projet eclipse> clic droit> Aller aux propriétés> Dans les bibliothèques> Maintenant, supprimez la bibliothèque système JRE> Cliquez sur Ajouter une bibliothèque> sélectionnez "Bibliothèque système JRE"> Cliquez sur Suivant> Sélectionnez "Workspace default JRE (jre1.8.x_xxx)"> terminer

Mon problème est résolu :) J'espère que cela vous aidera :)

Shubham Jain
la source
0

Donc, j'ai continué à tout essayer et enfin, il semble que la réinstallation de Java après la désinstallation a résolu mon problème.

Plabon Dutta
la source
0

en cas de problème pour la version d'installation JAVA

C: \ Où JAVA

donnera l'emplacement de java qu'il ramasse. Si vous avez un chemin autre que votre installation, supprimez ces fichiers ou renommez-le (peut-être en tant que _backup). vous obtiendrez la version appropriée du fichier java.

SumataPatil
la source
-1

J'ai rencontré le même problème, j'ai installé deux versions de Java, ce qui a causé ce problème. pour confirmer cela, cliquez sur l'icône java dans le panneau de configuration si ne s'ouvre pas, le problème est le même, il suffit de désinstaller une version. part de gâteau. Merci.

srinivasan Elangovan
la source
-2

J'étais confronté au même problème: une erreur s'est produite lors de l'initialisation de la VM java / lang / NoClassDefFoundError: java / lang / Object

Suivez les étapes ci-dessous pour résoudre le problème:

Étape 1. Accédez à C: \ Program Files \ et recherchez le dossier Java.

Étape 2. Supprimez le dossier C: \ Program Files \ Java.

Étape 3. Téléchargez le nouveau Jdk pour votre version 32 bits / 64 bits à partir de http://www.oracle.com/technetwork/java/javase/downloads/index.html

Étape 4. Installez JDK

Étape 5: Réglez maintenant JAVA_HOME sur "C: \ Program Files \ Java \ jdk1.8.0_91"

Étape 6: Ouvrez l'invite de commande et entrez java -version.

Ça marche.

Mahesh Sutar
la source
L'OP a mentionné que JAVA_HOME n'était pas le problème ici
Alexandre Beaudet
Pas besoin de configurer à nouveau JAVA_HOME s'il est déjà défini sur l'emplacement jdk. Vous pouvez simplement ignorer l'étape 5. Supprimez simplement l'ancien JDK et installez le plus récent.
Mahesh Sutar