JRE 1.7 - versión java - devuelve: java / lang / NoClassDefFoundError: java / lang / Object

135

Al ejecutar cualquier aplicación java, o simplemente 'java', la jvm falla:

Se produjo un error durante la inicialización de VM
java / lang / NoClassDefFoundError: java / lang / Object

Aquí hay una lista de respuestas incorrectas :

  1. El directorio de inicio de Java correcto, incluido el directorio / bin, está en la RUTA global

  2. JAVA_HOME está configurado correctamente

  3. Ejecutar el comando java -fullversion funciona

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
  4. Los enlaces simbólicos en / usr / java apuntan a la instalación correcta de java

  5. No instalé ningún Java 'predeterminado' cuando creé el sistema

  6. java -version falla ... el mismo error que el anterior

  7. Emitir los comandos desde debajo de la estructura de directorios de la instalación de Java tampoco funciona

  8. Esto es Java de 64 bits para un 64 bits

¿Algunas ideas?

Tux Skywalker
fuente
2
Parece que hay un problema al cargar el rt.jararchivo, que se requiere JVMal momento de la cargaJRE
Bhavik Ambani
tal vez algunos problemas relacionados con los permisos?
Mark Bramnik el
ejecutar truss / strace para ver los archivos faltantes / permisos de archivos
Jayan
inbytebg.com/techblog/?p=189 , en el primer comentario hay un truco hexadecimal para parchear el instalador
Sebastian

Respuestas:

186

Este problema proviene de una instalación incorrecta de Java.

Posibilidad 1

NOTA: Este escenario solo se aplica a Java 8 y versiones anteriores. A partir de Java 9, el JRE está estructurado de manera diferente. rt.jar y sus amigos ya no existen, y Pack200 ya no se usa.

La biblioteca estándar de Java está contenida en diversos frascos, tales como rt.jar, deploy.jar, jsse.jar, etc. Cuando se empaqueta el JRE, estos archivos JAR críticos se comprimen con Pack200 y se almacenan como rt.pack, deploy.pack,jsse.pack , etc. instalador de Java se supone que ellos descomprimir. Si experimenta este error, aparentemente eso no sucedió.

Debe ejecutar manualmente unpack200todos los .packarchivos en las carpetas lib/y JRE lib/ext/.

Ventanas

Para descomprimir un .packarchivo (por ejemplo rt.pack), ejecute:

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

Para descomprimir recursivamente todos los .packarchivos, desde la raíz de JRE ejecute:

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

*nada

Para descomprimir un .packarchivo (por ejemplo rt.pack), ejecute:

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

Para descomprimir recursivamente todos los .packarchivos, desde la raíz de JRE ejecute:

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

Posibilidad 2

Desinstaló Java de alguna otra manera. Quizás instaló sin derechos de administrador, o intentó simplemente extraer archivos del instalador. Intente nuevamente con el instalador y / o más privilegios. O, si no desea utilizar el instalador, utilice el .tar.gzpaquete Java.

Rigg802
fuente
2
Esta es una pregunta de Solaris, no de Windows.
Robin Kanters
1
Esta solución ayudó si solo descarga el archivo de almacenamiento de Java Linux y no desea utilizar los scripts de instalación.
PotOfTea
23
@Robin Kanters, ya que este mensaje exacto de problema / error, sus síntomas y las formas de solucionarlo son independientes de la plataforma, esta es una pregunta de Java RE, no Solaris.
1
confirme que tiene este problema en Windows después de que Java hizo alguna actualización automática
Lassi Kinnunen
55
Siempre uso for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(tal vez algún día lo haga un poco más robusto para que no tenga que cambiar manualmente la ruta, pero de nuevo, generalmente solo uso el .gzlanzamiento de JRE que no los empaqueta. )
Synetech
31

Para Java 8 en un sistema operativo * nix, vaya a <jdk root>/jre/lib(para mí /usr/java/jdk1.8.0_05/jre/lib). Desde este directorio, ejecute:

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

Para evitar problemas de versión en caso de que tenga otro JRE instalado, use el mismo unpack200que viene con el JRE que está arreglando, es decir, desde la línea de comando, use ../../bin/unpack200(para mí, esto se expande a /usr/java/jdk1.8.0_05/bin/unpack200), no solo unpack200.

betontalpfa
fuente
3
Para desarrollar tienes que descomprimir algunos otros paquetes: "<jdk1.8_root>/lib" ../bin/unpack200 tools.pack tools.jaren"<jdk1.8_root>/jre/lib/ext" ../../bin/unpack200 jfxrt.pack jfxrt.jar ../../bin/unpack200 localedata.pack localedata.jar
betontalpfa
Aquí se pueden encontrar algunos scripts para descomprimir todos los frascos faltantes de un JDK extraído manualmente: stackoverflow.com/questions/2203922/…
Kloe2378231
Este fue el problema en mi caso. Estoy usando Ubuntu 18.04. ¡Gracias!
Boncho Valkov
13

Parece que para una arquitectura de 64 bits tiene que instalar tanto la versión de 32 bits como la versión de 64 bits de jre (los archivos independientes de la arquitectura como rt.jar se distribuyen solo en la versión de 32 bits).

Recuerde entonces prestar atención para incluir el ejecutable java correcto en la variable de entorno PATH global.

Tommaso
fuente
3
¿De dónde sacaste eso architecture independent files as rt.jar are distributed only in the 32-bin version?
Aleksandr M
Acabo de examinar el contenido de la distribución
Tommaso
+1 Sí, tienes razón. rt.jar no está incluido en el paquete jre para solaris de 64 bits.
Aleksandr M
3
Para agregar a esto, nos encontramos con esto al hacer una instalación manual en SmartOS. Siga las instrucciones que se encuentran en blogs.oracle.com/thefield/entry/solaris_11_jdk_installation (en su mayor parte) y estará bien.
Khushil
Instalé ambos paquetes jdk-7u79-solaris-sparcv9.tar.Z y jdk-7u79-solaris-sparc.tar.Z. Ahora parece que está funcionando. Ty
Alex Pi
11

Solución rápida para personas impacientes;) En máquinas con Windows , intente esto: vaya al C:\Windows\System32directorio y elimine java.exe(o cambie el nombre a algo como java.exe.old).

Desde al menos 1.6, no debería haber un java.exeen el directorio de Windows. Si lo hay, es un remanente de algo.

Un poco más de lectura:

¡Estoy realmente sorprendido de que una pregunta de 2012 aún no tenga una respuesta aprobada y realmente he encontrado el mismo problema en 2015 en mi sistema operativo Win 7 de 32 bits!

Entonces, ¿qué pasó?

Básicamente, todo funcionaba bien, descargué la base de datos H2 y cuando intenté comenzar H2 Console (Command Line)obtuve:

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

Encontré esta pregunta y pude confirmar los mismos síntomas:

JAVA_HOME está configurado correctamente:

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

java -versionfalla, mientras java --fullversionfunciona bien:

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

SOLUCIÓN: ¡ Ve al C:\Windows\System32directorio y borra el java.exearchivo (en realidad cambié el nombre) !

Ahora obtengo:

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)

y H2 Console (Command Line)funciona bien también!

Los créditos van a la última publicación en este foro: https://bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/

iaforek
fuente
Yo también estoy enfrentando este problema, pero parece que en su caso simplemente está usando una versión anterior de Java. 1.6.0_26! = 1.6.0_45, su versión anterior probablemente no tiene el problema.
Centimane
¡Bien descrito! Tengo instalado JDK 1.6.0_26 y esa versión "más nueva" vino de la carpeta Windows System32. Ambos están en la variable de entorno PATH y en realidad no quiero usar el tiempo de ejecución de Java proporcionado por Windows. Por lo tanto, eliminarlo resolvió el problema. ¿Quizás también tengas dos tiempos de ejecución de Java en tu RUTA?
iaforek
Para mí, faltaba mi instalación rt.jar (que es donde se encuentra java.lang.Object). Desafortunadamente, cuando instalo el RPM desde kickstart, me falta el rt.jar, pero si instalo después de que esté allí, es un problema divertido.
Centimane
No puedo ayudarte con los RPM. Lo siento por eso.
iaforek
44
Para mí, los enlaces simbólicos para Java C:\ProgramData\Oracle\Java\javapathestaban causando el problema. Cambio la variable de entorno PATH y ahora funciona.
WhiteKnight
10

Descargué el nuevo JDK hoy (1.8.0.73) comenzó c:> java.exey obtuve el infame:

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

Solo quería compartir mi solución de trabajo aquí.

Cuando ingresé a la jdk\bincarpeta, Java funcionaría bien, así que sabía que era el PATH. Me puse PATHsolo \jdk\binen CMD para probarlo y funcionó.

Entonces, pensé que una de las carpetas en la que PATHdebía haber tenido java.exeestaba causando el conflicto. Al final resultó que era C:\>ProgramData\Oracle\Java\javapathque tiene enlaces simbólicos a los ejecutables.

java.exeestaba señalando jre\bin. El archivo estaba dañado, cuando comencé, \jre\bin\java.exeexactamente el mismo error. Bingo. Reinstalé JRE y el problema desapareció. Feliz codificación ...

Huelguista
fuente
8

Probablemente le falta un archivo llamado rt.jar en su instalación que tiene el archivo de clase para java.lang.Object. Verifique sus archivos de instalación, etc.

En particular, tenga en cuenta que un intsaller de 64 bits se superpone (o instala "junto a") una instalación de 32 bits existente. En otras palabras, para obtener una instalación de 64 bits que funcione completamente, primero debe ejecutar la instalación de 32 bits, y luego seguir con una instalación de 64 bits si tiene una máquina con capacidad de 64 bits ...

Si, en cambio, solo realiza una instalación de 64 bits, le faltarán ciertos archivos en la instalación y obtendrá errores como el anterior.

usuario3213415
fuente
Es parte de la respuesta. Debe descomprimir todos los archivos * .pack dentro de su directorio / lib y lib / ext de su ruta de Java SDK. unpack200 puede ayudarte con esto. Por favor, vea el comentario de Rigg802.
danger89
7

En Windows 10, estaba enfrentando el mismo problema con JRE 1.8 (8u121).
Mecanografía

java -version

el indicador cmd vuelve

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

Todos los otros comandos, echo %JAVA_HOME%, echo %JRE_HOME%, echo %PATH%, java -fullversionfuncionaba bien.

Diríjase a las variables de entorno en el panel de administración del sistema, elimine de PATH el enlace C:\ProgramData\Oracle\Java\javapathy asegúrese de haber establecido en PATH el enlace C:\Program Files\Java Folder\bin.

Después de eso, verifique si C:\Windows\System32existe un java.exearchivo; si es verdadero, elimine ese archivo.

Escribiendo ahora java -versionfunciona bien.

Francesco Marchitelli
fuente
2
Tengo el mismo problema después de la actualización de Windows, sin embargo, no tengo una carpeta C:\Program Files\Java Folder\bin. En cambio lo uso C:\Program Files\Java\jdk1.8.0_161\binpero no me ayuda de todos modos. No hay archivo java.exe en la carpeta System32
Tom
6

Este problema ocurre cuando instala el JDK por _uncompressing_él en lugar de _executing_hacerlo.

Por ejemplo:

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

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

En el primer escenario, las bibliotecas de tiempo de ejecución, como rt.jar, no se descomprimen automáticamente (por lo tanto, puede encontrar los archivos rt.pack, etc. en lugar de los archivos .jar).

kdn
fuente
4

Tuve el mismo problema recientemente. En mi caso, mi máquina con Windows 7 descargó automáticamente Java y lo agregó C:\ProgramData\Oracle\Java\javapathal comienzo de mi variable de entorno de ruta, lo que estropeó mi Java. Una vez que me deshice de eso del camino, funcionó.

desarrollador747
fuente
3

si hace "chmod u + rx" en el binario de Java y lo ejecuta, desempaquetará los archivos jar y podrá hacer una versión de Java sin errores de tiempo de ejecución

Peter Nielsen
fuente
3

No puede instalar solo los 64 bits, primero debe instalar los 32 bits y luego agregar los componentes de 64 bits.

Desde java.com:

Instalar el JRE en un sistema de 64 bits que permite una JVM de 32 bits es un proceso de dos pasos: primero instale el JRE de 32 bits y luego instale el soporte adicional para operaciones de 64 bits. Los nombres de los archivos son los siguientes:

Andrew Speer
fuente
El OP no menciona nada acerca de ejecutar JVM de 32 bits en un sistema de 64 bits ...?
wookie919
1

Si instala una versión de 64 bits sin instalar primero 32 bits, este error se producirá a pesar de solucionar todos los demás problemas. Tengo una nueva máquina Dell 10 i7 de 64 bits con Windows 10 Pro que ejecuta Java 8u71. Después de agregar mi% path% y% classpath% a las variables de entorno y probar varias otras soluciones, desinstalar 64 bits, instalar 32 bits y luego reinstalar 64 bits lo reparó.

Algunos de los problemas, como no tener sus archivos descomprimidos, etc., que se han mencionado como posibles causas, pueden seguir causando problemas, pero si no lo hace, las otras soluciones no funcionarán.

Bryan Robinson
fuente
1

En mi caso, utilizo un Windows 8.1 (instalado jdk1.8.0_77), hice tres cosas:

  1. Eliminé jdks anteriores
  2. Cambié el nombre del archivo java.exe dentro de C: \ Windows \ System32
  3. También eliminé C: \ ProgramData \ Oracle \ Java \ javapath en mi PATH (echo% PATH%)

y voila lo solucionó!

kashogi
fuente
0

Otra respuesta podría ser usar el archivo tar.gz en su lugar en el caso de Linux. Parece que hay algo así también para la plataforma solaris. De esta manera, todos los archivos ya estarán en el formato esperado y no habrá problemas de desempaquetado.

Rítmico
fuente
¿Qué quieres decir con usar el archivo tar.gz en su lugar?
Koray Tugay
Teniendo en cuenta que respondí esto hace aproximadamente 2.5 años, tuve que echar un vistazo al sitio de descarga de Java. Allí tiene la opción de descargar Java ya sea como empaquetado como .rpm para LinuX. Creo que lo intenté antes y tuve problemas. La descarga del archivo tar.gz funcionó mejor, ya que tenía todo el contenido en el formato de archivo deseado.
Rítmico
0

Tengo algún problema en las instalaciones de Linux x86_64 con JDK 1.7.0_40 i586. Descubrí que el problema es que rpm no puede descomprimir archivos jar, como lo menciona Rigg802 (aunque rpm completa el éxito de marcado):

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

El archivo /lib/ld-linux.so.2 es proporcionado por glibc-2.12-1.107.el6_4.4. i686 que no se encuentra entre rpm deps de jdk rpm.

Oracle JDK rpm también requiere versiones de 32 bits de libgcc-4.4.7-3.el6. i686 para ser instalado

Entonces, la solución es instalar glibc-2.12-1.107.el6_4.4.i686 y libgcc-4.4.7-3.el6.i686 primero.

scrutari
fuente
Tengo el mismo problema con Fedora 20 e instalo libgcc-4.8.2-7.fc20.i686 resuelve el problema. Txs
Pipe
0

Solución rápida que funcionó para mí:

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

Encontré que este error ocurrió cuando extraje el archivo .rpm.

Luego eliminé esa carpeta y descargué jdk-7u79-linux-x64.tar.gz para Linux 64 y extraje el contenido de este archivo. También: export JAVA_HOME = / opt / java / jdk1.7.0_79 export JDK_HOME = / opt / java / jdk1.7.0_79 export PATH = $ {JAVA_HOME} / bin

usuario5974531
fuente
0

Simplemente instale el jre nuevamente . Simplemente resolvió mi problema. (El lote de inicio de SonarQube comenzó a dar este error después de instalar jdk)

stratovarius
fuente
0

Vaya al panel de control, desinstale las cosas relacionadas con java (cierre eclipse si está abierto), luego reinstale java y abra eclipse, limpie los proyectos.

Ateeque Shaikh
fuente
Voto a favor. El OP claramente no está en una plataforma Windows.
Peter
0

Acabo de hacer esto en Solaris y me encontré con este problema idéntico donde incluso "java -version" no funciona. Hay una razón por la cual las versiones de 64 bits de la distribución son MUCHO más pequeñas que las de 32 bits. De hecho, es como se indicó anteriormente:

En otras palabras, para obtener una instalación de 64 bits que funcione completamente, primero debe ejecutar la instalación de 32 bits, y luego seguir con una instalación de 64 bits si tiene una máquina con capacidad de 64 bits ...

Así que ejecuté el instalador para 32 bits:

sh jdk-6u131-solaris-sparc.sh

Luego ejecuté el instalador para el 64-bit:

sh jdk-6u131-solaris-sparcv9.sh

Esto me da varios ejecutables de Java para elegir:

  • $ encontrar. -name 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

Los sparcv9 java son las versiones de 64 bits y funcionan con "-version" cuando se instalan junto con el JDK de 32 bits.

  • ./jdk1.6.0_131/bin/sparcv9/java -version
  • versión de Java "1.6.0_131"
  • Java (TM) SE Runtime Environment (compilación 1.6.0_131-b32)
  • Java HotSpot (TM) VM de servidor de 64 bits (compilación 20.131-b32, modo mixto)

-Dan

usuario7323228
fuente
Es cierto, pero la pregunta es de 2012 y no conocemos la plataforma del OP. Se refiere a /usr/javalo que claramente es un sistema operativo Linux / Unix como SO. Tiene razón en que la instalación de Solaris en Java fue diferente de cualquier otro sistema operativo hasta Java8. Básicamente, primero tenía que instalar el paquete de 32 bits y luego el paquete de 64 bits encima . Pero eso es todo en el pasado ahora que Java de 32 bits ya no es compatible con Solaris, similar a lo que dice Mac OS X.
Peter
0

En la ventana 10 ya hay una ruta presente en env ya C:\>ProgramData\Oracle\Java\javapathque contiene enlaces simbólicos a los ejecutables.

Cuando instalo una nueva versión y la elimino de mi variable de entorno, mi proyecto completo comienza a mostrarla.

Estoy usando oxígeno eclipse en la ventana 10

Para resolverlo: -

  1. Simplemente elimino la ruta C:\>ProgramData\Oracle\Java\javapathde la variable de entorno y agregué un nuevo entorno como JAVA_HOME y% JAVA_HOME% / bin en la ruta

  2. Reinstalo el jdk con privilegios de administrador (elimine la carpeta JRE anterior)

  3. Abra su proyecto eclipse> haga clic con el botón derecho> Ir a propiedades> En bibliotecas> Ahora elimine la Biblioteca del sistema JRE> Haga clic en Agregar biblioteca> seleccione "Biblioteca del sistema JRE"> Haga clic en Siguiente> Seleccione "Espacio de trabajo JRE predeterminado (jre1.8.x_xxx)"> terminar

Mi problema está resuelto :) Espero que te ayude :)

Shubham Jain
fuente
0

Entonces, seguí intentándolo todo y finalmente parece que reinstalar Java después de desinstalarlo solucionó mi problema.

Dutta Plabon
fuente
0

si hay algún problema para la versión de instalación de JAVA

C: \ Donde JAVA

le dará la ubicación de Java recogiendo. Si tiene otra ruta que no sea su instalación, elimine esos archivos o cámbiele el nombre (puede ser como _backup). Obtendrá la versión adecuada del archivo Java.

SumataPatil
fuente
-1

Me enfrenté al mismo problema, he instalado dos versiones de Java, por lo tanto, causó este problema. para confirmar esto, vaya y haga clic en el icono de Java en el panel de control si no se abre, entonces el problema es el mismo, simplemente vaya y desinstale una versión. pedazo de pastel Gracias.

srinivasan Elangovan
fuente
-2

Estaba enfrentando el mismo problema: se produjo un error durante la inicialización de VM java / lang / NoClassDefFoundError: java / lang / Object

Siga los pasos a continuación para resolver el problema:

Paso 1. Ir a C: \ Archivos de programa \ y buscar la carpeta Java.

Paso 2. Eliminar la carpeta C: \ Archivos de programa \ Java.

Paso 3. Descargue el nuevo Jdk para su versión 32 bit / 64 bit de http://www.oracle.com/technetwork/java/javase/downloads/index.html

Paso 4. Instalar JDK

Paso 5: Ahora configure JAVA_HOME en "C: \ Archivos de programa \ Java \ jdk1.8.0_91"

Paso 6: Abra el símbolo del sistema e ingrese java -version.

Funciona.

Mahesh Sutar
fuente
El OP mencionó que JAVA_HOME no era el problema aquí
Alexandre Beaudet el
No es necesario configurar JAVA_HOME nuevamente si ya está configurado en la ubicación jdk. Simplemente puede omitir el Paso 5. Simplemente elimine el JDK anterior e instale uno nuevo.
Mahesh Sutar