Je suis un NoClassDefFoundError
quand je lance mon application Java. Ce qui est généralement la cause de cela?
Réponses
Trop de publicités?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:
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.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.
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%;
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.