J'ai la méthode ci-dessous dans la classe A. Toutes les classes A, B, C et la classe principale à partir de laquelle «A» est invoqué sont dans le même pot.Comment résoudre java.lang.NoClassDefFoundError se produisant dans le même pot?
public class A {
private static void init() {
if (!init) {
synchronized (B.class) {
if (!init) {
map = C.creat();
init = true;
}
}
}
}
}
Le code est de lancer un Throwable
, java.lang.NoClassDefFoundError
au bloc synchronized
(ligne n ° 4). Quelle peut être la raison pour laquelle toutes les classes sont dans le même jar, il n'y a aucune chance de ne pas trouver une classe pendant l'exécution.
J'ai parcouru la solution en Existing Question mais je n'ai pas trouvé de solution. S'il vous plaît aider.
Il y a des blocs d'initialisation statiques et variables statiques dans la classe B.
Le problème peut être résolu, si j'utilise un static object/class A
pour synchroniser le morceau de code au lieu de « B ». Je suis curieux de savoir pourquoi j'ai fait face à l'exception et comment la réparer en utilisant la classe B seulement.
Pourquoi utilisez-vous B.class pour synchroniser? Je ne pense pas que ce soit une bonne pratique. – duffymo
Se pourrait-il que les blocs statiques dans B appellent la méthode 'A.init'? – RealSkeptic
Pouvez-vous montrer la structure du paquet du pot?Vous pouvez vous décompiler jd-gui – Optimus