¿Qué causas y cuáles son las diferencias entre NoClassDefFoundError y ClassNotFoundException?


¿Cuál es la diferencia entre NoClassDefFoundError y ClassNotFoundException?

¿Qué hace que sean arrojados? Cómo se pueden resolver?

A menudo me encuentro con estos elementos lanzables al modificar el código existente para incluir nuevos archivos jar. Los he golpeado tanto en el lado del cliente como en el lado del servidor para una aplicación java distribuida a través de webstart.

Posibles razones que he encontrado:

  1. paquetes no incluidos en build.xml para el lado cliente del código
  2. falta la ruta de clase en tiempo de ejecución para los nuevos frascos que estamos usando
  3. la versión entra en conflicto con el jar anterior

Cuando me encuentro con estos hoy tomo un enfoque de rastro y error para hacer que las cosas funcionen. Necesito más claridad y comprensión.

Author: pants, 2009-09-22

15 answers

La diferencia con respecto a las especificaciones de la API de Java es la siguiente.

Para ClassNotFoundException:

Lanzado cuando una aplicación intenta cargar en una clase a través de su cadena nombre usando:

  • El método forName en la clase Class.
  • El método findSystemClass en la clase ClassLoader.
  • El método loadClass en la clase ClassLoader.

Pero no hay definición para la clase con se pudo encontrar el nombre especificado.

Para NoClassDefFoundError:

Lanzado si la Máquina Virtual Java o una instancia ClassLoader intenta cargar en la definición de una clase (como parte de una llamada de método normal o como parte de crear una nueva instancia usando el nuevo expression) and no definition of the se pudo encontrar clase.

La definición de clase buscada existió cuando la ejecución actual clase fue compilado, pero la definición ya no se puede encontrar.

Por lo tanto, parece que la NoClassDefFoundError ocurre cuando el código fuente se compiló correctamente, pero en tiempo de ejecución, no se encontraron los archivos class necesarios. Esto puede ser algo que puede suceder en la distribución o producción de archivos JAR, donde no se incluyeron todos los archivos class requeridos.

En cuanto a ClassNotFoundException, parece que puede provenir de intentar hacer llamadas reflectantes a clases en tiempo de ejecución, pero las clases que el programa está tratando de llamar no existen.

La diferencia entre los dos es que uno es un Error y el otro es un Exception. With NoClassDefFoundError es un Error y surge de que la Máquina Virtual Java tiene problemas para encontrar una clase que esperaba encontrar. Un programa que se esperaba que funcionara en tiempo de compilación no puede ejecutarse porque class no se encuentran archivos, o no es el mismo que se produjo o encontró en tiempo de compilación. Este es un error bastante crítico, ya que el programa no puede ser iniciado por la JVM.

Por otro lado, el ClassNotFoundException es Exception, por lo que es algo esperado, y es algo que sea recuperable. El uso de reflexión is puede ser propenso a errores (ya que hay algunas expectativas de que las cosas no salgan como se esperaba. No hay una comprobación en tiempo de compilación para ver que existen todas las clases requeridas, por lo que cualquier problema con la búsqueda de las clases deseadas aparecerá en tiempo de ejecución.

 373
Author: coobird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-22 02:43:35

Se lanza una ClassNotFoundException cuando el ClassLoader no encuentra la clase reportada. Esto normalmente significa que la clase falta en el CLASSPATH. También podría significar que la clase en cuestión está tratando de cargarse desde otra clase que se cargó en un classloader padre y, por lo tanto, la clase del classloader hijo no es visible. Este es a veces el caso cuando se trabaja en entornos más complejos como un servidor de aplicaciones (WebSphere es infame por tal classloader cuestión).

La gente a menudo tiende a confundir java.lang.NoClassDefFoundError con java.lang.ClassNotFoundException sin embargo, hay una distinción importante. Por ejemplo, una excepción (un error realmente ya que java.lang.NoClassDefFoundError es una subclase de java.lang.Error) como

java.lang.NoClassDefFoundError:
org/apache/activemq/ActiveMQConnectionFactory

No significa que la clase ActiveMQConnectionFactory no esté en el CLASSPATH. De hecho, es todo lo contrario. Esto significa que la clase ActiveMQConnectionFactory fue encontrada por el ClassLoader sin embargo, al intentar cargar la clase, se encontró con un error al leer la definición de la clase. Esto ocurre típicamente cuando la clase en cuestión tiene bloques estáticos o miembros que usan una Clase que no es encontrada por el ClassLoader. Así que para encontrar al culpable, vea el origen de la clase en cuestión (ActiveMQConnectionFactory en este caso) y busque código usando bloques estáticos o miembros estáticos. Si no tiene acceso a la fuente, simplemente descompilarla usando JAD.

Al examinar el código, digamos que encuentra una línea de código como a continuación, asegúrese de que la clase SomeClass en su CLASSPATH.

private static SomeClass foo = new SomeClass();

Consejo : Para averiguar a qué jar pertenece una clase, puede usar el sitio web jarFinder . Esto le permite especificar un nombre de clase usando comodines y busca la clase en su base de datos de jars. jarhoo te permite hacer lo mismo, pero ya no es gratis de usar.

Si desea localizar el jar al que pertenece una clase en una ruta local, puede usar una utilidad como jarscan (http://www.inetfeedback.com/jarscan / ). Usted acaba de especificar el clase que desea localizar y la ruta del directorio raíz donde desea que comience a buscar la clase en archivos jars y zip.

 76
Author: Sanjiv Jivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-28 12:07:25

NoClassDefFoundError es básicamente un error de enlace. Ocurre cuando intenta crear una instancia de un objeto (estáticamente con "nuevo") y no se encuentra cuando estaba durante la compilación.

ClassNotFoundException es más general y es una excepción en tiempo de ejecución cuando intenta usar una clase que no existe. Por ejemplo, tiene un parámetro en una función que acepta una interfaz y alguien pasa una clase que implementa esa interfaz, pero no tiene acceso a la clase. También cubre el caso de carga dinámica de clases, como usar loadClass () o Class.forName ().

 33
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-22 02:36:57

Un NoClassDefFoundError (NCDFE) ocurre cuando su código ejecuta "new Y()" y no puede encontrar la clase Y.

Puede ser simplemente que Y falta en su cargador de clases como sugieren los otros comentarios, pero podría ser que la clase Y no está firmada o tiene una firma no válida, o que Y es cargada por un cargador de clases diferente no visible para su código, o incluso que Y depende de Z que no se pudo cargar por ninguna de las razones anteriores.

Si esto sucede, entonces la JVM recordará la resultado de cargar X (NCDFE) y simplemente lanzará un nuevo NCDFE cada vez que pregunte por Y sin decirle por qué:

class a {
  static class b {}
  public static void main(String args[]) {
    System.out.println("First attempt new b():");
    try {new b(); } catch(Throwable t) {t.printStackTrace();}
    System.out.println("\nSecond attempt new b():");
    try {new b(); } catch(Throwable t) {t.printStackTrace();}
  }
}

guardar esto como a.java en algún lugar

El código simplemente intenta instanciar una nueva clase "b" dos veces, aparte de eso, no tiene ningún error y no hace nada.

Compile el código con javac a.java, luego ejecute a invocando java -cp . a should solo debe imprimir dos líneas de texto, y debe ejecutarse bien sin errores.

A continuación, elimine la "a a b.class" archivo (o llenarlo con basura, o copiar a.class sobre él) para simular la clase faltante o dañada. Esto es lo que sucede:

First attempt new b():
java.lang.NoClassDefFoundError: a$b
    at a.main(a.java:5)
Caused by: java.lang.ClassNotFoundException: a$b
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 1 more

Second attempt new b():
java.lang.NoClassDefFoundError: a$b
    at a.main(a.java:7)

La primera invocación resulta en una ClassNotFoundException (lanzada por el cargador de clases cuando no puede encontrar la clase), que debe estar envuelta en un NoClassDefFoundError sin marcar, ya que el código en cuestión (new b()) debería funcionar.

El segundo intento, por supuesto, también fallará, pero como puede ver, la excepción envuelta ya no existe, porque el cargador de clases parece recordar los cargadores de clases fallidos. Usted ve solo el NCDFE con absolutamente ninguna pista en cuanto a lo que realmente sucedió.

Así que si alguna vez ves un NCDFE sin causa raíz, necesitas ver si puedes rastrear la primera vez que se cargó la clase para encontrar la causa del error.

 29
Author: mogsie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-07 20:27:33

De http://www.javaroots.com/2013/02/classnotfoundexception-vs.html:

ClassNotFoundException : ocurre cuando el cargador de clases no pudo encontrar la clase requerida en la ruta de clase. Por lo tanto, básicamente debe comprobar su ruta de clase y añadir la clase en el classpath.

NoClassDefFoundError : esto es más difícil de depurar y encontrar la razón. Esto se produce cuando en tiempo de compilación las clases requeridas están presentes, pero en tiempo de ejecución las clases son cambiadas o eliminadas o la clase estática inicializa las excepciones lanzadas. Esto significa que la clase que está siendo cargada está presente en classpath, pero una de las clases que son requeridas por esta clase son eliminadas o falladas al cargar por el compilador. Así que usted debe ver las clases que dependen de esta clase.

Ejemplo:

public class Test1
{
}


public class Test 
{
   public static void main(String[] args)
   {
        Test1 = new Test1();    
   }

}

Ahora después de compilar ambas clases, si elimina Test1.archivo de clase y ejecutar clase de prueba, lanzará

Exception in thread "main" java.lang.NoClassDefFoundError: Test
    at Test1.main(Test1.java:5)
Caused by: java.lang.ClassNotFoundException: Test
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

ClassNotFoundException: lanzado cuando una aplicación intenta cargar en una clase a través de su nombre, pero no se pudo encontrar ninguna definición para la clase con el nombre especificado.

NoClassDefFoundError: lanzado si la Máquina Virtual Java intenta cargar la definición de una clase y no se pudo encontrar ninguna definición de la clase.

 19
Author: KingFeming,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-08 21:05:10

¿Cuál es la razón para obtener cada uno de ellos y cualquier proceso de pensamiento sobre cómo lidiar con tales errores?

Están estrechamente relacionados. Se lanza un ClassNotFoundException cuando Java fue a buscar una clase en particular por su nombre y no pudo cargarla correctamente. Un NoClassDefFoundError se lanza cuando Java fue a buscar una clase que estaba vinculada a algún código existente, pero no pudo encontrarla por una razón u otra (por ejemplo, classpath incorrecto, versión incorrecta de Java, versión incorrecta de una biblioteca) y es completamente fatal, ya que indica que algo ha ido Mal.

Si usted tiene un fondo C, un CNFE es como un fracaso para dlopen()/dlsym() y un NCDFE es un problema con el enlazador; en el segundo caso, los archivos de clase en cuestión nunca deberían haber sido realmente compilados en la configuración que está tratando de usarlos.

 14
Author: Donal Fellows,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-07 21:04:07

Ejemplo # 1:

class A{
 void met(){
   Class.forName("com.example.Class1");
 }
}

Si com/example/Class1 no existe en ninguno de los classpaths, entonces lanza ClassNotFoundException.

Ejemplo # 2:

Class B{
  void met(){
   com.example.Class2 c = new com.example.Class2();
 }
}

Si com/example/Class2 existió durante la compilación de B, pero no se encontró durante la ejecución, entonces arroja NoClassDefFoundError.

Ambas son excepciones en tiempo de ejecución.

 11
Author: Dinesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-12 17:31:01

ClassNotFoundException se lanza cuando se intenta cargar la clase haciendo referencia a ella a través de una cadena. Por ejemplo, el parámetro a en Clase.forName () es una cadena, y esto aumenta el potencial de que los nombres binarios no válidos se pasen al cargador de clases.

La ClassNotFoundException se lanza cuando se encuentra un nombre binario potencialmente inválido; por ejemplo, si el nombre de la clase tiene el carácter'/', está obligado a obtener una ClassNotFoundException. También se lanza cuando la clase directamente referenciada no está disponible en el classpath.

Por otro lado, NoClassDefFoundError se lanza

  • cuando la representación física real de la clase-el .el archivo de clase no está disponible,
  • o la clase ya se ha cargado en un classloader diferente (normalmente un classloader padre habría cargado la clase y por lo tanto la clase no se puede cargar de nuevo),
  • o si se ha encontrado una definición de clase incompatible - el nombre en el archivo de clase no coincide con el nombre solicitado,
  • o (lo más importante) si una clase dependiente no puede ser localizada y cargada. En este caso, la clase directamente referenciada podría haber sido localizada y cargada, pero la clase dependiente no está disponible o no puede ser cargada. Este es un escenario donde la clase directamente referenciada se puede cargar a través de una clase.forName o métodos equivalentes. Esto indica un fallo en la vinculación.

En resumen, un NoClassDefFoundError se suele lanzar en instrucciones new () o invocaciones de métodos que cargan una clase previamente ausente (a diferencia de la carga de clases basada en cadenas para ClassNotFoundException), cuando el classloader no puede encontrar o cargar la(s) definición (es) de clase.

Eventualmente, depende de la implementación de ClassLoader lanzar una instancia de ClassNotFoundException cuando no puede cargar una clase. La mayoría de las implementaciones de classloader personalizadas realizan esto ya que extienden el URLClassLoader. Normalmente los cargadores de clases no lanzar explícitamente un NoClassDefFoundError en cualquiera de las implementaciones de métodos: esta excepción generalmente se lanza desde la JVM en el compilador de HotSpot, y no por el propio classloader.

 9
Author: Vineet Reynolds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-22 04:38:18

Diferencia Entre ClassNotFoundException Vs NoClassDefFoundError

introduzca la descripción de la imagen aquí

 7
Author: Lawakush Kurmi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-31 19:15:58

Con los nombres mismos podemos identificar fácilmente uno de Exception y otro es de Error.

Exception: Las excepciones ocurren durante la ejecución del programa. Un programador puede manejar estas excepciones mediante el bloque try catch. Tenemos dos tipos de excepciones. Excepción marcada que lanza en tiempo de compilación. Excepciones de tiempo de ejecución que se lanzan en tiempo de ejecución, estas excepciones generalmente ocurren debido a una mala programación.

Error: Estos no son exceptions at all, it is beyond the scope of programmer. Estos errores generalmente son lanzados por JVM.


introduzca la descripción de la imagen aquí fuente de la imagen

Diferencia:

ClassNotFoundException:

  • El cargador de clases no logra verificarun código de bytes de clase que mencionamos en La fase de enlacedel subsistema de carga de clases que obtenemosClassNotFoundException.
  • {[2] } es una excepción comprobada derivada directamente de la clase java.lang.Exception y debe proporcionar un manejo explícito para ello
  • ClassNotFoundException aparece cuando hay una carga explícita de clase involucrada al proporcionar el nombre de la clase en tiempo de ejecución usando ClassLoader.loadClass (), Class.forName () y ClassLoader.findSystemClass().

NoClassDefFoundError:

  • El cargador de clases no logra resolverreferencias de una clase en Fase de enlacede subsistema de carga de clases obtenemos NoClassDefFoundError.
  • NoClassDefFoundError es un Error derivado de la clase LinkageError, que se usa para indicar casos de error, donde una clase tiene una dependencia de alguna otra clase y esa clase ha cambiado de forma incompatible después de la compilación.
  • NoClassDefFoundErrores el resultado de carga implícita de la clase debido a una llamada a un método desde esa clase o cualquier variable de acceso.

Similitudes:

  • Tanto NoClassDefFoundError como ClassNotFoundException están relacionados con la falta de disponibilidad de una clase en tiempo de ejecución.
  • Tanto ClassNotFoundException como NoClassDefFoundError están relacionados con Java classpath.
 6
Author: Premraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-30 04:11:32

Dadas las acciones de sussystem del cargador de clases:

http://www.artima.com/insidejvm/ed2/images/fig7-1.gif

Este es un artículo que me ayudó mucho a entender la diferencia: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html

Si se produce un error durante la carga de la clase, entonces una instancia de la subclase de LinkageError debe lanzarse en un punto del programa que (directa o indirectamente) utiliza la clase o interfaz que se está cargando.

Si la Máquina Virtual Java alguna vez intenta cargar una clase C durante verificación (§5.4.1) o resolución (§5.4.3) (pero no inicialización (§5.5)), y el cargador de clases que se utiliza para iniciar la carga de C lanza una instancia de ClassNotFoundException , luego el Java Virtual La máquina debe lanzar una instancia de NoClassDefFoundError cuya causa es la instancia de ClassNotFoundException.

Así que una ClassNotFoundException es una causa raíz de NoClassDefFoundError.
Y un NoClassDefFoundError es un caso especial de error de carga de tipo, que ocurre en el paso Enlace.

 3
Author: Anton Shchastnyi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-20 09:57:39

Añadir una posible razón en la práctica:

  • ClassNotFoundException: como dijo cletus, se utiliza interfaz mientras que la clase heredada de interfaz no está en el classpath. Por ejemplo, Patrón de Proveedor de servicios (o Localizador de Servicios ) trate de localizar alguna clase no existente
  • NoClassDefFoundError: la clase dada se encuentra mientras que la dependencia de la clase dada no se encuentra

En la práctica, Error puede ser lanzado en silencio, e.g, que envíe una tarea de temporizador y en la tarea de temporizador que lanza Error, mientras que en la mayoría de los casos, su programa solo atrapa Excepción. Luego el Temporizador el bucle principal termina sin ninguna información. Un error similar a NoClassDefFoundError es ExceptionInInitializerError, cuando su inicializador estático o el inicializador para una variable estática lanza una excepción.

 2
Author: leef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-11 14:30:40

Me recuerdo lo siguiente una y otra vez cuando necesito actualizar

ClassNotFoundException

Jerarquía De Clases

ClassNotFoundException extends ReflectiveOperationException extends Exception extends Throwable

Durante la depuración

  1. Jar requerido, falta la clase en el classpath.
  2. Verifique que todos los jars requeridos estén en classpath de jvm.

NoClassDefFoundError

Jerarquía De Clases

NoClassDefFoundError extends LinkageError  extends Error extends Throwable

Durante la depuración

  1. Problema con la carga de una clase dinámicamente, que fue compilada correctamente
  2. Problema con bloques estáticos, constructores, métodos init () de clase dependiente y el error real está envuelto por múltiples capas [especialmente cuando se usa spring, hibernate la excepción real está envuelta y obtendrá NoClassDefError]
  3. Cuando se enfrenta a "ClassNotFoundException" bajo un bloque estático de clase dependiente
  4. Problema con las versiones de la clase. Esto sucede cuando tiene dos versiones v1, v2 de la misma clase bajo diferentes jar / packages, que se compiló con éxito usando v1 y v2, se carga en el tiempo de ejecución que no tiene los métodos/vars relevantes y verá esta excepción. [Una vez resolví este problema eliminando el duplicado de la clase relacionada log4j bajo múltiples jars que aparecían en el classpath]
 1
Author: Sankarganesh Eswaran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-19 12:48:53

ClassNotFoundException es una excepción marcada que ocurre cuando le decimos a JVM que cargue una clase por su nombre de cadena usando Class.forName () o ClassLoader.findSystemClass() o ClassLoader.Los métodos loadClass () y la clase mencionada no se encuentran en el classpath.

La mayoría de las veces, esta excepción ocurre cuando intenta ejecutar una aplicación sin actualizar el classpath con los archivos JAR necesarios. Por ejemplo, es posible que haya visto esta excepción al hacer el código JDBC para conectarse a su base de datos es decir, MySQL, pero su classpath no tiene JAR para ello.

NoClassDefFoundError el error ocurre cuando JVM intenta cargar una clase en particular que es la parte de la ejecución de su código (como parte de una llamada a un método normal o como parte de la creación de una instancia usando la palabra clave new) y esa clase no está presente en su classpath pero estaba presente en tiempo de compilación porque para ejecutar su programa necesita compilarlo y si está intentando usar una clase que no está presente el compilador generará un error de compilación.

A continuación se muestra la breve descripción

introduzca la descripción de la imagen aquí

Puedes leer Todo sobre ClassNotFoundException Vs NoClassDefFoundError para más detalles.

 1
Author: Naresh Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-08 13:29:14

ClassNotFoundException y NoClassDefFoundError ocurren cuando una clase en particular no se encuentra en tiempo de ejecución.Sin embargo, ocurren en diferentes escenarios.

ClassNotFoundException es una excepción que ocurre cuando intenta cargar una clase en tiempo de ejecución usando Class.Los métodos forName() o loadClass() y las clases mencionadas no se encuentran en el classpath.

    public class MainClass
    {
        public static void main(String[] args)
        {
            try
            {
                Class.forName("oracle.jdbc.driver.OracleDriver");
            }catch (ClassNotFoundException e)
            {
                e.printStackTrace();
            }
        }
    }



    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at pack1.MainClass.main(MainClass.java:17)

NoClassDefFoundError es un error que ocurre cuando una clase en particular está presente en tiempo de compilación, pero faltaba en run tiempo.

    class A
    {
      // some code
    }
    public class B
    {
        public static void main(String[] args)
        {
            A a = new A();
        }
    }

Cuando compilas el programa anterior, dos.se generarán archivos de clase. Uno es A.class y otro es B.class. Si retira la A.class archivo y ejecutar el B.class archivo, Java Runtime System lanzará NoClassDefFoundError como a continuación:

    Exception in thread "main" java.lang.NoClassDefFoundError: A
    at MainClass.main(MainClass.java:10)
    Caused by: java.lang.ClassNotFoundException: A
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 0
Author: Neeraj Gahlawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-18 09:29:41