¿Qué es Java Lang noclassDeffoundError??

¿Qué es Java Lang noclassDeffoundError??
En el Java.lang.* Paquete, hay una clase llamada, NoclassDefFoundError. La descripción de cualquier clase es la definición de la clase. NoclassDefFoundError representa un error de definición de clase encontrada. Esto se arroja cuando la instancia de la máquina virtual Java (JVM) o un cargador de clases intenta cargarse en la definición de una clase, pero no se pudo encontrar ninguna definición de la clase.

Este artículo ilustra lo que es NoclassDefFoundError y proporciona resoluciones. Proporciona dos escenarios importantes para la excepción de ser lanzado y ofrece sus respectivas resoluciones.

Escenario de la línea de comandos

Una situación de ejemplo en la que esto puede ocurrir es la siguiente: suponga que el directorio Dir1 existe en el usuario@hostname: ~ $ Directorio. En el directorio, Dir1, el archivo fuente de Java, el theclass.Java, tiene la clase principal de Java, la theclass. Ahora, en el símbolo del sistema, user@hostname: ~ $, el programador compila el archivo de origen, el theclass.Java, con el comando:

Javac Dir1/THECLASS.Java

La compilación pasará con éxito para tener un archivo de bytecode, THECLASS.clase, que se produciría en el directorio Dir1. Si el programador continúa ejecutando el archivo, THECLASS.clase, con el siguiente comando:

Java Dir1/THECLASS

En la terminal, él recibiría el mensaje de error:

Error: no pudo encontrar ni cargar la clase principal Dir1.La clase
Causado por: java.lang.NoclassDeffoundError: THECLASS (Nombre incorrecto: Dir1/THECLASS)

El programador puede pensar que esto se debe a que no escribió todo el nombre de archivo Bytecode en el símbolo del sistema. Entonces podría intentar ejecutar el programa con el siguiente comando:

Java Dir1/THECLASS.clase

Si hiciera eso, recibiría el mensaje de error:

Error: no pudo encontrar ni cargar la clase principal Dir1.La clase.clase
Causado por: java.lang.ClassNotFoundException: Dir1.La clase.clase

Este artículo se encuentra en NoclassDefFoundError, por lo que no se abordaría ClassNotFoundException. El comando,

Java Dir1/THECLASS

se supone que debe funcionar, pero no funcionó. En opinión del autor, el verdadero problema en esta situación es con el lenguaje Java y no el del programador.

NoclassDefFoundError en Java ocurre cuando Java Virtual Machine no puede encontrar una clase en particular en tiempo de ejecución. Esto también puede suceder dentro de un programa en ejecución; vea a continuación.

Resolución

Para resolver este problema, vaya al directorio, DIR1 y ejecute el programa desde allí, con los siguientes comandos, en el terminal, desde el directorio de usuario:

CD Dir1
java

Escenario de clase de Bytecode faltante

En esta sección, el usuario de directorio@hostname: ~/dir1 $, se utilizará exclusivamente. Considere el siguiente programa Java:

Clase Aclass

Clase pública MainClass
public static void main (string [] args)
Aclass obj = new Aclass ();

Suponga que esto está en un archivo y guardado con el nombre, MainClass.Java en el directorio, usuario@hostname: ~/dir1 $. El siguiente comando compilará el archivo:

user@hostname: ~/dir1 $ javac mainclass.Java

El resultado será dos archivos, MainClass.java y clase principal.clase, en el mismo directorio, Dir1. Clase principal.Java es el archivo de origen y MainClass.la clase es el archivo bytecode. Para ejecutar un programa en Java, es el archivo de código de byte que se ejecuta. El siguiente comando en el terminal ejecutará el programa:

usuario@hostname: ~/dir1 $ java mainclass

Tenga en cuenta que ".La clase "no se escribe, aunque es su archivo que está activado. No debe haber salida porque no hay comando de impresión en el programa. Debe haber solo el nuevo símbolo del sistema, lo que indica que la clase MainClass ha ejecutado con éxito el programa. Así es como funciona Java.

Tener las clases como dos pares de archivos

Las dos clases anteriores se pueden guardar como dos archivos de origen diferentes, con los nombres, Aclass.Java y el theclass.Java. Una clase.Java tendría el código para aclass y el theclass.Java tendría el código para MainClass, con su nombre de archivo renombrado a la THECLASS.

Cuando estos dos archivos están en el mismo directorio, Dir1, solo THECLASS.Java tiene que estar en el comando de compilación. Integraría aclasa.Java . El siguiente comando es suficiente:

user@hostname: ~/dir1 $ javac theclass.Java

En el directorio, Dir1, se producirán dos archivos nuevos: THECLASS.clase y aclasa.clase . Estos son archivos de Bytecode. La clase.La clase corresponde a la de la parte.Java y aclasa.La clase corresponde a la de la parte.clase.

Ahora, para ejecutar el programa, solo el THECLASS.El archivo de clase debe ser comandado (sin la extensión ",.clase"). Integrará el archivo bytecode, aclass.clase. El siguiente comando es suficiente para ejecutar la clase:

user@hostname: ~/dir1 $ java theclass

Como antes, no hay salida. Debería aparecer el nuevo símbolo del sistema, lo que demuestra que el programa se ha ejecutado con éxito.

NoclassDefFoundError en Java ocurre cuando Java Virtual Machine no puede encontrar una clase en particular en tiempo de ejecución. Esto también puede suceder dentro de un programa en ejecución, como se ilustra en esta sección.

Ahora, aclasa.La clase es una parte integral de la clase.clase. En otras palabras, el theclass.la clase no puede funcionar sin aclasa.clase. Entonces, si aclasa.La clase se elimina o renombra, NoclassDeffoundError sería arrojada. La pantalla de error terminal, para el comando anterior, sería:

Excepción en el hilo "principal" Java.lang.NoclassdeffoundError: aclasa
en el theclass.principal (.Java: 9)
Causado por: java.lang.ClassNotFoundException: Aclass
en Java.base/jdk.interno.cargador.BuiltinClassLoader.LoadClass (BuiltInClassLoader.Java: 581)
en Java.base/jdk.interno.cargador.Cargadores de clases $ AppClassLoader.LoadClass (cargadores de clases.Java: 178)
en Java.base/java.lang.Cargador de clases.LoadClass (cargador de clases.Java: 522)
… 1 más

Resolución

Este problema se puede resolver de la siguiente manera: si el aclasa.la clase fue transferida de su directorio, debe ser devuelto. Si se eliminó, suponiendo que el aclasa.Java y aclasa.Java no fue eliminado, entonces el programa solo necesita ser recompilado, con

user@hostname: ~/dir1 $ javac theclass.Java

y un nuevo aclasa.La clase en el directorio, Dir1, se crearía. Y el comando,

user@hostname: ~/dir1 $ java theclass

no emitiría el mensaje de error largo anterior para noclassDefFoundError.

Posibilidad de recuperarse

NoclassDefFoundError es un error de tiempo de ejecución, por lo que no depende del programador recuperarse de él. Como se explicó anteriormente, la mejor manera de manejar el problema es por resolución.

Conclusión

En el Java.lang.* Paquete, hay una clase llamada, NoclassDefFoundError. La descripción de cualquier clase es la definición de la clase. NoclassDefFoundError representa un error de definición de clase encontrada. Esto se arroja cuando la instancia de la máquina virtual Java (JVM) o un cargador de clases intenta cargarse en la definición de una clase, pero no se pudo encontrar ninguna definición de la clase.

NoclassDefFoundError es un error de tiempo de ejecución, por lo que no depende del programador recuperarse de él. La mejor manera de manejar el problema es por resolución: use el comando de línea de comando para ejecutar el comando en el directorio de interés. Reemplazar cualquier .archivo de clase; Ahí no es donde se suponía que debía estar.