683 votes

Pourquoi je reçois un NoClassDefFoundError en Java?

Je suis un NoClassDefFoundError quand je lance mon application Java. Ce qui est généralement la cause de cela?

1060voto

Jared Points 7800

Alors qu'il est possible que cela soit dû à un classpath la discordance entre le moment de la compilation et de l'exécution, il n'est pas nécessairement vrai.

Il est important de garder deux ou trois exceptions détroit dans notre tête, dans ce cas:

  1. java.lang.ClassNotFoundException Cette exception indique que la classe n'a pas été trouvé sur le chemin de la classe. Cela indique que nous étions en train d'essayer de charger la définition de la classe, et la classe n'existe pas dans le classpath.

  2. java.lang.NoClassDefFoundError Cette exception indique que la JVM a regardé dans sa classe interne définition de structure de données pour la définition d'une classe et ne la trouvent pas. C'est différent que de dire qu'il n'a pas pu être chargé à partir du classpath. Généralement, cela indique que nous avons déjà essayé de charger une classe du chemin de classe, mais il a échoué pour une raison quelconque - maintenant, nous essayons d'utiliser la classe (et donc ont besoin de le charger, car elle n'est pas la dernière fois), mais on ne va même pas essayer de le charger, parce que nous n'avons pas de chargement plus tôt (et raisonnablement soupçonner que nous allions échouer à nouveau). L'échec précédent pourrait être une ClassNotFoundException ou un ExceptionInInitializerError (indiquant une défaillance du bloc d'initialisation statique) ou n'importe quel nombre d'autres problèmes. Le point est, un NoClassDefFoundError n'est pas nécessairement un problème de classpath.

310voto

Mocky Points 2857

Ceci est causé quand il y a un fichier de classe que votre code dépend et il est présent au moment de la compilation, mais introuvable lors de l'exécution. Chercher les différences dans votre temps de construction et d'exécution classpath.

33voto

shsteimer Points 8749

J'ai trouvé que parfois, je reçois un NoClassDefFound d'erreur lorsque le code est compilé avec une version incompatible de la classe a trouvé lors de l'exécution. L'instance spécifique je retiens, c'est avec l'apache de l'axe de la bibliothèque. Il y avait en fait 2 versions sur mon runtime classpath et il était en train de cueillir le jour et la version incompatible et pas la bonne, provoquant une NoClassDefFound erreur. C'était dans une application en ligne de commande où j'ai été en utilisant une commande semblable à cela.

set classpath=%classpath%;axis.jar

J'ai été en mesure d'obtenir de choisir la bonne version à l'aide de:

set classpath=axis.jar;%classpath%;

3voto

frank hadder Points 2988

Je crois qu'il peut aussi se produire si vous n'avez pas exécuter votre programme java avec la syntaxe correcte. Par exemple, vous devez appeler votre classe à partir de la racine du dossier bin avec le nom complet du paquet (ie. mon.package.myClass).

Je serais plus précis, si je le pouvais, mais je ne suis pas beaucoup d'une application java gars. Je me souviens juste de gâcher ce jusqu'à quelques reprises.

-2voto

Surya Points 182

lors de l'exécution d'une application java, la JVM recherche le fichier de classe à l'intérieur de la variable classpath. S'il ne trouve pas que dans cette classe, puis il déclenche l'NOClassDefFound Erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X