Pourquoi ai-je un NoClassDefFoundError en Java?

530

J'obtiens un NoClassDefFoundErrorlorsque j'exécute mon application Java. Quelle est généralement la cause de cela?

John Meagher
la source
1
Je pense que cela peut également arriver si vous n'exécutez pas votre programme java avec la syntaxe correcte. Par exemple, vous devez appeler votre classe à partir du dossier bin racine avec le nom de package complet (c'est-à-dire my.package.myClass). Je serais plus précis si je le pouvais, mais je ne suis pas vraiment un gars java. Je me souviens juste d'avoir foiré ça plusieurs fois.
frank hadder
17
@BoltClock Nous avons besoin d'une question canonique pour pointer les nombreux doublons. Pourquoi est-ce pas possible?
Raedwald
21
Avez-vous envisagé de changer la réponse acceptée pour que celle que la communauté trouve la plus précieuse soit au sommet?
Martin Smith

Réponses:

264

Cela est dû au fait qu'il existe un fichier de classe dont dépend votre code et qu'il est présent au moment de la compilation mais introuvable lors de l'exécution. Recherchez les différences de temps de génération et de chemins de classe d'exécution.

Mocky
la source
1
J'ai eu cette erreur lors de la mise d'un fichier source sous le mauvais espace de noms / package. J'ai pensé que je pouvais le mettre n'importe où, et le compilateur était content. Il s'avère que j'aurais dû être plus diligent pour que l'exécution soit également heureuse.
CenterOrbit
1
J'ai eu cette erreur une fois lorsque mon serveur a manqué de mémoire lors d'un téléchargement de fichier. Chaque fois que j'essayais le téléchargement, j'obtenais une erreur différente. Finalement, il m'a dit que je n'avais pas assez d'espace de stockage.
James M. Lay
81
Cette réponse n'est pas nécessairement vraie et sera trompeuse pour beaucoup de gens! Voir la meilleure réponse de Jared ci-dessous.
Dave L.
4
@DaveL. Merci! La réponse de Jared avec plus de 400 votes positifs est bien en dessous! Une réponse avec -4 voix haute (bas?) Est bien au-dessus. Il y a quelque chose de louche dans la logique d'ordonnancement des réponses de SO.
Saurabh Patil,
1
C'est un long tir pour quelqu'un, mais j'ai rencontré cette erreur car la classe en question contenait un SimpleDateFormat qui a été initialisé avec un caractère non valide (j'avais T au milieu au lieu de 'T').
Ryan D
819

Bien qu'il soit possible que cela soit dû à une incompatibilité de chemin de classe entre la compilation et l'exécution, ce n'est pas nécessairement vrai.

Il est important de garder deux ou trois exceptions différentes bien dans notre tête dans ce cas:

  1. java.lang.ClassNotFoundException Cette exception indique que la classe est introuvable sur le chemin de classe. Cela indique que nous essayions de charger la définition de classe et que la classe n'existait pas sur le chemin de classe.

  2. java.lang.NoClassDefFoundError Cette exception indique que la machine virtuelle Java a recherché dans sa structure de données de définition de classe interne la définition d'une classe et ne l'a pas trouvée. C'est différent de dire qu'il n'a pas pu être chargé à partir du chemin de classe. Habituellement, cela indique que nous avons précédemment tenté de charger une classe à partir du chemin de classe, mais cela a échoué pour une raison quelconque - maintenant, nous essayons de réutiliser la classe (et devons donc la charger, car elle a échoué la dernière fois), mais nous ' Nous n'allons même pas essayer de le charger, car nous n'avons pas pu le charger plus tôt (et nous pensons raisonnablement que nous échouerions à nouveau). L'échec précédent peut être une exception ClassNotFoundException ou ExceptionInInitializerError (indiquant une défaillance dans le bloc d'initialisation statique) ou un certain nombre d'autres problèmes. Le fait est qu'un NoClassDefFoundError n'est pas nécessairement un problème de chemin de classe.

Jared
la source
30
Merci d'avoir mentionné la cause d'une NoClassDefFoundError, cela m'a beaucoup aidé! Dans mon cas, une exceptionInInitializerError a été lancée auparavant, c'est ainsi que j'ai découvert les erreurs dans les blocs statiques.
Thomas
@Jared, Quand je reçois Error: Could not find or load main class, il sera classé dans quelle catégorie d'erreur?
Vikram
@Pops: Rendu le langage plus verbeux pour spécifier les objets des verbes "essayer" :)
Jared
1
@Vikram la "classe n'a pas pu trouver ou charger" n'est pas une exception Java, elle est causée par le lanceur (qui inspecte le JAR et l'attribut manifeste principal).
annonce le
2
ClassNotFoundException est également levée lorsqu'une classe a une initialisation statique qui déclenche une erreur ou une exception. Ils auraient probablement dû choisir un nom différent pour cet événement.
coladict
125

Voici le code à illustrer java.lang.NoClassDefFoundError. Veuillez voir la réponse de Jared pour une explication détaillée.

NoClassDefFoundErrorDemo.java

public class NoClassDefFoundErrorDemo {
    public static void main(String[] args) {
        try {
            // The following line would throw ExceptionInInitializerError
            SimpleCalculator calculator1 = new SimpleCalculator();
        } catch (Throwable t) {
            System.out.println(t);
        }
        // The following line would cause NoClassDefFoundError
        SimpleCalculator calculator2 = new SimpleCalculator();
    }

}

SimpleCalculator.java

public class SimpleCalculator {
    static int undefined = 1 / 0;
}
xli
la source
3
Et la raison en est qu'après le premier essai, jvm sait déjà que cela ne fonctionnera pas et lèvera une exception différente une deuxième fois?
ikamen
@ikamen Apparemment, il a stocké quelque part l'initialisation de classe infructueuse SimpleCalculatoraprès la division par zéro? Quelqu'un a-t-il une référence à la documentation officielle de ce comportement?
ᴠɪɴᴄᴇɴᴛ
4
@PhilipRego Vous ne savez pas ce que vous entendez par une NoClassDefFoundError «pure». La première fois que new SimpleCalculator()vous appelez, vous obtenez une ExceptionInInitializerError avec une cause de ArithmeticException. La deuxième fois que vous appelez, new SimpleCalculator()vous obtenez un NoClassDefFoundError aussi pur que n'importe quel autre. Le fait est que vous pouvez obtenir un NoClassDefFoundError pour une raison autre que SimpleCalculator.class n'étant pas sur le chemin de classe au moment de l'exécution.
harperska
36

NoClassDefFoundError en Java

Définition:

  1. Java Virtual Machine n'est pas en mesure de trouver une classe particulière au moment de l'exécution qui était disponible au moment de la compilation.

  2. Si une classe était présente lors de la compilation mais n'était pas disponible dans le chemin d'accès aux classes java pendant l'exécution.

entrez la description de l'image ici

Exemples:

  1. La classe n'est pas dans Classpath, il n'y a pas de moyen sûr de le savoir mais plusieurs fois vous pouvez simplement jeter un œil pour imprimer System.getproperty ("java.classpath") et il imprimera le chemin de classe à partir de là, vous pouvez au moins obtenir une idée de votre chemin de classe d'exécution réel.
  2. Un exemple simple de NoClassDefFoundError est que la classe appartient à un fichier JAR manquant ou JAR n'a pas été ajouté dans classpath ou parfois le nom du jar a été changé par quelqu'un comme dans mon cas un de mes collègues a changé tibco.jar en tibco_v3.jar et le programme est échouer avec java.lang.NoClassDefFoundError et je me demandais ce qui ne va pas.

  3. Essayez simplement d'exécuter avec l'option -classpath explicitement avec le chemin de classe qui fonctionnera et si cela fonctionne, c'est un signe court certain que quelqu'un remplace le chemin de classe java.

  4. Un problème d'autorisation sur le fichier JAR peut également provoquer NoClassDefFoundError en Java.
  5. La faute de frappe sur la configuration XML peut également provoquer NoClassDefFoundError en Java.
  6. lorsque votre classe compilée qui est définie dans un package, ne se présente pas dans le même package lors du chargement comme dans le cas de JApplet elle lancera NoClassDefFoundError en Java.

Solutions possibles:

  1. La classe n'est pas disponible dans Java Classpath.
  2. Si vous travaillez dans un environnement J2EE, la visibilité de Class sur plusieurs Classloaders peut également provoquer java.lang.NoClassDefFoundError, voir les exemples et la section de scénario pour une discussion détaillée.
  3. Recherchez java.lang.ExceptionInInitializerError dans votre fichier journal. NoClassDefFoundError en raison de l'échec de l'initialisation statique est assez courant.
  4. Parce que NoClassDefFoundError est une sous-classe de java.lang.LinkageError, elle peut également survenir si l'une des dépendances comme la bibliothèque native n'est pas disponible.
  5. Tout script de démarrage remplace la variable d'environnement Classpath.
  6. Vous exécutez peut-être votre programme à l'aide de la commande jar et la classe n'a pas été définie dans l'attribut ClassPath du fichier manifeste.

Ressources:

3 façons de résoudre NoClassDefFoundError

java.lang.NoClassDefFoundError Modèles de problème

Affy
la source
1
Très bonne réponse. Je pense que j'ai essayé tout ce que vous proposez et j'ai toujours ce problème. Je peux exclure certains d'entre eux en raison du pot travaillant avec le ressort, mais ne semble pas être aimé par java.sql (dans mon cas, le pilote sap db pour Hana).
JE Carter II
Il s'agit en fait de System.getproperty ("java.class.path")
RIJIK
33

J'ai constaté que parfois j'obtiens une erreur NoClassDefFound lorsque le code est compilé avec une version incompatible de la classe trouvée lors de l'exécution. L'instance spécifique dont je me souviens concerne la bibliothèque d'axes Apache. Il y avait en fait 2 versions sur mon chemin de classe d'exécution et il récupérait la version obsolète et incompatible et pas la bonne, provoquant une erreur NoClassDefFound. C'était dans une application en ligne de commande où j'utilisais une commande similaire à celle-ci.

set classpath=%classpath%;axis.jar

J'ai pu l'obtenir pour récupérer la bonne version en utilisant:

set classpath=axis.jar;%classpath%;
shsteimer
la source
4
Eu le même problème. Il s'avère que j'ai compilé le fichier war avec Java7, mais mon installation Tomcat utilisait Java6. J'ai dû mettre à jour mes variables environnementales
duvo
4
Si cela se produit comme ça, je dirai que Java est en désordre. +2 si c'est vrai. Je ne peux pas encore vérifier cela. Si trouvé vrai, il fera à nouveau +1 (dans les commentaires)
supernova
7

C'est la meilleure solution j'ai trouvée jusqu'à présent.

Supposons que nous ayons un package appelé org.mypackagecontenant les classes:

  • HelloWorld (classe principale)
  • SupportClass
  • UtilClass

et les fichiers définissant ce package sont stockés physiquement sous le répertoire D:\myprogram(sous Windows) ou/home/user/myprogram (sous Linux).

La structure du fichier ressemblera à ceci: entrez la description de l'image ici

Lorsque nous invoquons Java, nous précisons le nom de l'application à exécuter: org.mypackage.HelloWorld. Cependant, nous devons également indiquer à Java où chercher les fichiers et répertoires définissant notre package. Donc, pour lancer le programme, nous devons utiliser la commande suivante: entrez la description de l'image ici

Ram Patra
la source
6

J'utilisais Spring Framework avec Maven et j'ai résolu cette erreur dans mon projet.

Il y avait une erreur d'exécution dans la classe. Je lisais une propriété sous forme d'entier, mais lorsqu'elle a lu la valeur du fichier de propriétés, sa valeur était double.

Spring ne m'a pas donné de trace complète de la pile sur quelle ligne le runtime a échoué. Il a simplement dit NoClassDefFoundError. Mais quand je l'ai exécutée en tant qu'application Java native (en la retirant de MVC), cela a donné ExceptionInInitializerErrorquelle était la véritable cause et comment j'ai retracé l'erreur.

La réponse de @ xli m'a donné un aperçu de ce qui peut mal se passer dans mon code.

Nikhil Sahu
la source
1
La même chose m'est arrivée lors de la programmation d'un Servlet (a NoClassDefFoundErrorété causée par ExceptionInInitalizerError, qui a été causée par DateTimeParseException). C'est un peu trompeur, non? Je sais qu'ils avaient probablement leurs raisons de le faire comme ça, mais ce serait tellement agréable d'avoir au moins un petit indice, qui NoClassDefFoundErrorétait le résultat d'une autre exception, sans avoir besoin de le déduire. Lancer à ExceptionInInitializerErrornouveau serait beaucoup plus clair. Parfois, le lien entre les deux n'est pas si évident.
Bartłomiej Zieliński
5

J'obtiens NoClassFoundError lorsque les classes chargées par le chargeur de classes d'exécution ne peuvent pas accéder aux classes déjà chargées par le rootloader java. Étant donné que les différents chargeurs de classe se trouvent dans différents domaines de sécurité (selon java), le jvm ne permettra pas aux classes déjà chargées par le rootloader d'être résolues dans l'espace d'adressage du chargeur d'exécution.

Exécutez votre programme avec 'java -javaagent: tracer.jar [YOUR java ARGS]'

Il produit une sortie affichant la classe chargée et le chargeur env qui a chargé la classe. Il est très utile de savoir pourquoi une classe ne peut pas être résolue.

// ClassLoaderTracer.java
// From: https://blogs.oracle.com/sundararajan/entry/tracing_class_loading_1_5

import java.lang.instrument.*;
import java.security.*;

// manifest.mf
// Premain-Class: ClassLoadTracer

// jar -cvfm tracer.jar manifest.mf ClassLoaderTracer.class

// java -javaagent:tracer.jar  [...]

public class ClassLoadTracer 
{
    public static void premain(String agentArgs, Instrumentation inst) 
    {
        final java.io.PrintStream out = System.out;
        inst.addTransformer(new ClassFileTransformer() {
            public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {

                String pd = (null == protectionDomain) ? "null" : protectionDomain.getCodeSource().toString();
                out.println(className + " loaded by " + loader + " at " + new java.util.Date() + " in " + pd);

                // dump stack trace of the thread loading class 
                Thread.dumpStack();

                // we just want the original .class bytes to be loaded!
                // we are not instrumenting it...
                return null;
            }
        });
    }
}
codeDr
la source
1
Le lien est mort. Essayez la version archivée: web.archive.org/web/20131216000019/https://blogs.oracle.com/…
avgvstvs
5

Un cas intéressant dans lequel vous pourriez en voir beaucoup NoClassDefFoundErrorsest lorsque vous:

  1. throwun RuntimeExceptiondans le staticbloc de votre classeExample
  2. Intercepter (ou si cela n'a pas d'importance comme s'il était lancé dans un cas de test )
  3. Essayez de créer une instance de cette classe Example

static class Example {
    static {
        thisThrowsRuntimeException();
    }
}

static class OuterClazz {

    OuterClazz() {
        try {
            new Example();
        } catch (Throwable ignored) { //simulating catching RuntimeException from static block
            // DO NOT DO THIS IN PRODUCTION CODE, THIS IS JUST AN EXAMPLE in StackOverflow
        }

        new Example(); //this throws NoClassDefFoundError
    }
}

NoClassDefErrorsera jeté accompagné ExceptionInInitializerErrordu bloc statique RuntimeException.


C'est un cas particulièrement important lorsque vous voyez NoClassDefFoundErrorsdans vos TESTS D'UNITÉ .

D'une certaine manière, vous "partagez" l' staticexécution du bloc entre les tests, mais l'initiale ExceptionInInitializerErrorne sera que dans un seul cas de test. Le premier qui utilise la Exampleclasse problématique . Les autres cas de test qui utilisent la Exampleclasse seront simplement lancés NoClassDefFoundErrors.

Bartek Lipinski
la source
4
C'est un conseil assez utile dans la vraie vie. Je viens d'avoir la même situation avec les initialiseurs d'attribut de classe. Vous n'avez qu'une seule fois la possibilité de voir le problème réel dans le journal. Une fois que la classe est chargée (ou tentée de toute façon), vous devez tout redémarrer.
DailyFrankPeter
4

La technique ci-dessous m'a aidé plusieurs fois:

System.out.println(TheNoDefFoundClass.class.getProtectionDomain().getCodeSource().getLocation());

où TheNoDefFoundClass est la classe qui peut être "perdue" en raison d'une préférence pour une version plus ancienne de la même bibliothèque utilisée par votre programme. Cela se produit le plus souvent dans les cas où le logiciel client est déployé dans un conteneur dominant, armé de ses propres chargeurs de classe et de tonnes de versions anciennes des bibliothèques les plus populaires.

Aram Paronikyan
la source
3

Dans le cas où vous avez généré du code (EMF, etc.), il peut y avoir trop d'initialiseurs statiques qui consomment tout l'espace de la pile.

Voir la question Stack Overflow Comment augmenter la taille de la pile Java? .

Aykut Kllic
la source
"EMF" ? Voulez-vous dire " MEF " ?
Peter Mortensen
2
Nan. EMf comme cadre de modélisation Eclipse. Dans l'automobile, nous pouvons faire face à cette erreur lors de l'exécution du code généré.
Aykut Kllic
1

J'ai résolu mon problème en désactivant les preDexLibraries pour tous les modules:

dexOptions {
        preDexLibraries false
        ...
Michael
la source
1

NoClassDefFoundErrorpeut également se produire lorsqu'un initialiseur statique tente de charger un ensemble de ressources qui n'est pas disponible au moment de l'exécution, par exemple un fichier de propriétés que la classe affectée tente de charger à partir du META-INFrépertoire, mais qui n'y est pas. Si vous n'attrapez pas NoClassDefFoundError, parfois vous ne pourrez pas voir la trace complète de la pile; pour surmonter cela, vous pouvez temporairement utiliser une catchclause pour Throwable:

try {
    // Statement(s) that cause the affected class to be loaded
} catch (Throwable t) {
    Logger.getLogger("<logger-name>").info("Loading my class went wrong", t);
}
ᴠɪɴᴄᴇɴᴛ
la source
Ceci est une erreur. Une ressource manquante ne vous donnera pas cette erreur. Vous ne l'obtiendrez que s'il manque une classe .
Stephen C
@StephenC Je devrais peut-être insister davantage sur cette partie, mais j'ai écrit for example a properties file that the affected class tries to load from the META-INF directory. Cela m'est réellement arrivé et j'ai pu résoudre le problème NoClassDefFoundErroren ajoutant le fichier de propriétés manquant. J'ai ajouté cette réponse exactement parce que l'on ne s'attendrait pas à cette erreur dans les circonstances mentionnées.
ᴠɪɴᴄᴇɴᴛ
1
Vous avez alors manqué quelque chose de très important dans votre explication, car la seule façon dont un fichier de ressources manquant pourrait déclencher cette exception est si vous essayez de charger le fichier de ressources dans une staticinitialisation ... qui a déclenché une exception non vérifiée et provoqué la classe init échouer. Toute exception non vérifiée se propageant à partir de l'initialisation statique ferait cela.
Stephen C
Si je me trompe (c'est-à-dire que ce n'est pas dû à l'échec de l' staticinitialisation), je serais intéressé de voir un exemple réel (c'est-à-dire un MCVE) qui illustre le comportement.
Stephen C
1
@StephenC Vous avez tout à fait raison, cependant :( J'ai recherché le cas où j'ai rencontré ce problème et cela impliquait en effet un initialiseur statique essayant de charger un bundle de ressources. Je vais augmenter / corriger ma description de la cause. Merci d'avoir pointé ce out.
ᴠɪɴᴄᴇɴᴛ
1

J'ai obtenu cette erreur lorsque j'ajoute la dépendance Maven d'un autre module à mon projet, le problème a finalement été résolu en ajoutant -Xss2mà l'option JVM de mon programme (c'est un mégaoctet par défaut depuis JDK5.0). On pense que le programme n'a pas assez de pile pour charger la classe.

Alan Ackart
la source
0

Si quelqu'un vient ici à cause d'une java.lang.NoClassDefFoundError: org/apache/log4j/Loggererreur, dans mon cas, il a été produit parce que j'ai utilisé log4j 2 (mais je n'ai pas ajouté tous les fichiers qui l'accompagnent), et une bibliothèque de dépendances a utilisé log4j 1. La solution était d'ajouter le Log4j 1.x bridge: le pot log4j-1.2-api-<version>.jarfourni avec log4j 2. Plus d'infos sur la migration log4j 2 .

ST7
la source
0

Deux copies de paiement différentes du même projet

Dans mon cas, le problème était l'incapacité d'Eclipse à différencier deux copies différentes du même projet. J'en ai un verrouillé sur le coffre (contrôle de version SVN) et l'autre travaillant dans une branche à la fois. J'ai essayé un changement dans la copie de travail en tant que cas de test JUnit, qui comprenait l'extraction d'une classe interne privée pour être une classe publique à part entière et pendant que cela fonctionnait, j'ouvre l'autre copie du projet pour regarder un autre partie du code qui nécessitait des modifications. À un certain point, le NoClassDefFoundErrorsurgi se plaignit que la classe intérieure privée n'était pas là; un double-clic dans la trace de la pile m'a amené au fichier source dans la mauvaise copie du projet.

La fermeture de la copie de tronc du projet et l'exécution à nouveau du scénario de test ont permis de résoudre le problème.

manuelvigarcia
la source
0

Cette erreur peut être due à des exigences de version Java non vérifiées .

Dans mon cas, j'ai pu résoudre cette erreur, tout en créant un projet open source de haut niveau, en passant de Java 9 à Java 8 à l'aide de SDKMAN! .

sdk list java
sdk install java 8u152-zulu
sdk use java 8u152-zulu

Effectuez ensuite une nouvelle installation comme décrit ci-dessous.


Lorsque vous utilisez Maven comme outil de construction, il est parfois utile - et généralement gratifiant, de faire une construction «d'installation» propre avec les tests désactivés .

mvn clean install -DskipTests

Maintenant que tout a été construit et installé, vous pouvez continuer et exécuter les tests.

mvn test
nobar
la source
0

J'ai reçu des erreurs NoClassDefFound lorsque je n'ai pas exporté une classe dans l'onglet "Commander et exporter" du chemin de génération Java de mon projet. Assurez-vous de mettre une coche dans l'onglet "Commander et exporter" de toutes les dépendances que vous ajoutez au chemin de génération du projet. Voir l' avertissement Eclipse: XXXXXXXXXXX.jar ne sera pas exporté ni publié. Runtime ClassNotFoundExceptions peut en résulter .

Steve Stilson
la source
0

Cela peut également être dû au fait que vous copiez le fichier de code à partir d'un IDE avec un certain nom de package et que vous souhaitez essayer de l'exécuter à l'aide du terminal. Vous devrez d'abord supprimer le nom du package du code. Cela m'arrive.

off99555
la source
0

Dans mon cas, j'obtenais cette erreur en raison d'une incompatibilité dans les versions JDK. Lorsque j'ai essayé d'exécuter l'application à partir d'Intelij, cela ne fonctionnait pas, mais l'exécuter à partir de la ligne de commande a fonctionné. Cela est dû au fait qu'Intelij tentait de l'exécuter avec le JDK Java 11 qui était configuré, mais sur la ligne de commande, il s'exécutait avec le JDK Java 8. Après avoir changé ce paramètre sous Fichier> Structure du projet> Paramètres du projet> SDK du projet, cela a fonctionné pour moi.

Ben Waters
la source
0

Tout le monde parle ici de certaines choses de configuration Java, de problèmes JVM, etc., dans mon cas, l'erreur n'était pas du tout liée à ces sujets et avait une raison très triviale et facile à résoudre: j'avais une annotation erronée à mon point de terminaison dans mon contrôleur ( Application Spring Boot).

bdskfsdk321dsad3
la source
0

J'ai eu un problème intéressant avec NoClassDefFoundError dans JavaEE avec le serveur Liberty. J'utilisais des adaptateurs de ressources IMS et mon server.xml avait déjà un adaptateur de ressources pour imsudbJXA.rar. Lorsque j'ajoutais un nouvel adaptateur pour imsudbXA.rar, je commençais à obtenir cette erreur pour les objets d'instance pour DLIException, IMSConnectionSpec ou SQLInteractionSpec. Je ne pouvais pas comprendre pourquoi mais je l'ai résolu en créant un nouveau server.xml pour mon travail en utilisant uniquement imsudbXA.rar. Je suis sûr que l'utilisation de plusieurs adaptateurs de ressources dans server.xml est très bien, je n'ai pas eu le temps d'examiner cela.

pixel
la source
-1

Java n'a pas pu trouver la classe A lors de l'exécution. La classe A faisait partie du projet maven ArtClient d'un autre espace de travail. J'ai donc importé ArtClient dans mon projet Eclipse. Deux de mes projets utilisaient ArtClient comme dépendance. J'ai changé la référence de bibliothèque en référence de projet pour ceux-ci (Build Path -> Configure Build Path).

Et le problème a disparu.

Pekmezli Dürüm
la source
-1

J'ai eu le même problème et j'étais en stock pendant de nombreuses heures.

J'ai trouvé la solution. Dans mon cas, il y avait la méthode statique définie à cause de cela. La JVM ne peut pas créer un autre objet de cette classe.

Par exemple,

private static HttpHost proxy = new HttpHost(proxyHost, Integer.valueOf(proxyPort), "http");
sudar
la source
-6

J'ai reçu ce message après avoir supprimé deux fichiers de la bibliothèque SRC, et quand je les ai ramenés, j'ai continué à voir ce message d'erreur.

Ma solution était: Redémarrez Eclipse. Depuis lors, je n'ai plus revu ce message :-)

Eliran
la source
4
Cela s'explique par la réponse la plus votée, lorsque vous avez compilé pour la première fois, les fichiers étaient là, puis vous avez supprimé certains fichiers, les classes ont été supprimées, donc au moment de l'exécution, vous avez obtenu le ClassNotFound, puis vous les avez renvoyés, mais Eclipse ne l'a toujours pas fait remarquez donc que les classes générées étaient toujours manquantes, mais après avoir redémarré Eclipse, l'espace de travail a été actualisé et les classes étaient à nouveau disponibles, mais en général ce n'est pas une solution ou une solution de contournement, la solution recherche la classe / le pot manquant dans le runtime chemin de classe.
Jose Manuel Gomez Alvarez
-7

Assurez-vous que cela correspond au module:appet module:lib:

android {
    compileSdkVersion 23
    buildToolsVersion '22.0.1'
    packagingOptions {
    }

    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 11
        versionName "2.1"
    }
Alex
la source
3
Comment votre solution est-elle en rapport avec ce problème commun?
Taavi Ilves
La configuration d'échantillon n'est pas équilibrée (trois {set deux }). Peux-tu le réparer?
Peter Mortensen