Comment résoudre ClassNotFoundException?


J'essaie d'exécuter une application Java, mais j'obtiens cette erreur:

java.lang.ClassNotFoundException:

Après les deux-points vient l'emplacement de la classe qui est manquante. Cependant, je sais que cet emplacement n'existe pas puisque la classe est située ailleurs. Comment puis-je mettre à jour le chemin de cette classe? Cela a-t-il quelque chose à voir avec le chemin de classe?

Author: vaxquis, 2013-07-01

17 answers

Votre chemin de classe est cassé (ce qui est un très problème courant dans le monde Java).

Selon la façon dont vous démarrez votre application, vous devez réviser l'argument en -cp, votre entrée de chemin de classe dans le MANIFESTE.MF ou votre disposition de disque.

 23
Author: Thorbjørn Ravn Andersen, 2013-07-01 16:02:10

Un chemin de classe est une liste d'emplacements à partir desquels charger les classes.

Ces "emplacements" peuvent être soit des répertoires, soit des fichiers jar.

Pour les répertoires, la JVM suivra un modèle attendu pour le chargement d'une classe. Si j'ai le répertoire C:/myproject/classes dans mon chemin de classe, et j'essaie de charger une classe com.mycompany.Foo, il va chercher sous le répertoire classes pour un répertoire appelé com, puis sous celui d'un répertoire appelé mycompany, et enfin, il recherchera un fichier appelé Foo.de catégorie dans ce répertoire.

Dans la deuxième instance, pour les fichiers jar, il recherchera le fichier jar pour cette classe. Un fichier jar n'est en réalité qu'une collection compressée de répertoires comme celui ci-dessus. Si vous décompressez un fichier jar, vous aurez un tas de répertoires et de fichiers de classe suivant le modèle ci-dessus.

Ainsi, la JVM traverse un chemin de classe du début à la fin à la recherche de la définition de la classe lorsqu'elle tente de charger la classe définition. Par exemple, dans le classpath :

C:/myproject/classes;C:/myproject/lib/stuff.pot;C:/myproject/lib/otherstuff.jar

La JVM tentera de regarder dans le répertoire classesd'abord, puis dans stuff.jar et enfin dans otherstuff.jar .

Lorsque vous obtenez une ClassNotFoundException, cela signifie que la JVM a parcouru tout le chemin de classe et n'a pas trouvé la classe que vous avez tenté de référencer. La solution, comme souvent dans le monde Java, est à vérifiez votre chemin de classe.

Vous définissez un chemin de classe sur la ligne de commande en disant: java -cp, puis votre classpath. Dans unE tel qu'Eclipse, vous aurez une option de menu pour spécifier votre chemin de classe.

 29
Author: user2000590, 2013-07-01 16:20:52

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

Supposons que nous ayons un paquet appelé org.mypackage contenant les classes:

  • HelloWorld (classe principale)
  • Classe de support
  • Classe utilitaire

Et les fichiers définissant ce paquet sont stockés physiquement dans 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 spécifions le nom du application à exécuter: org.mypackage.HelloWorld. Cependant, nous devons également dire à 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

REMARQUE: Vous devez exécuter la commande java ci-dessus, quel que soit votre emplacement actuel. Mais ce n'est pas le cas pour javac. Pour compiler vous pouvez même aller directement dans le répertoire où vous avez vos fichiers .java et exécutent directement javac ClassName.java.

 9
Author: Ram Patra, 2015-10-05 06:51:52

Si vous connaissez le chemin de la classe ou le jar contenant la classe, ajoutez-le à votre chemin de classe lors de son exécution. Vous pouvez utiliser le classpath comme mentionné ici:

Sous Windows

java -classpath .;yourjar.jar YourMainClass

Sous UNIX / Linux

java -classpath .:yourjar.jar YourMainClass
 6
Author: Juned Ahsan, 2013-07-01 16:05:18

Essayez-les si vous utilisez maven. J'utilise maven pour mon projet et lorsque je fais mvn clean install et essayez d'exécuter un programme, il lève l'exception. Donc, je nettoie le projet et l'exécute à nouveau et cela fonctionne pour moi.

J'utilise eclipse ID.

Pour l'exception Class Not Found lors de l'exécution de Junit test, essayez d'exécuter mvn clean test une fois. Il compilera toutes les classes de test.

 4
Author: Arun, 2018-09-05 06:29:33

Pour ajouter l'emplacement d'une classe à votre classpath via la ligne de commande simplement ajouter -cp ou -classpath et l'emplacement de la classe lors de l'exécution il. I. E.

java -cp "c:/location/of/file" YourProgram

Ou si vous exécutez unE tel qu'eclipse, vous pouvez faire un clic droit sur le project -> build path -> configure build path et ajoutez le JAR externe contenant votre classe au chemin de construction, cela devrait fonctionner correctement.

 3
Author: invictvs1, 2013-07-01 16:23:03

Utilisez ';' comme séparateur. Si vos variables d'environnement sont correctement définies, vous devriez voir vos paramètres. Si votre CHEMIN et votre CHEMIN de classe sont corrects, Windows doit reconnaître ces commandes. Vous n'avez PAS besoin de redémarrer votre ordinateur lors de l'installation de Java.

 3
Author: Kiran S, 2015-01-19 08:33:42

Ajoutez le chemin complet du fichier jar au CHEMIN de CLASSE. Sous linux, utilisez: export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH". L'autre façon de travailler (sans modifier le CLASSPATH) était de décompresser le fichier jar dans le dossier de projet actuel.

Ways n'a pas fonctionné pour moi:

1) En utilisant l'option -cp avec le chemin complet du fichier jar.

2) En utilisant -cp avec uniquement le nom de jar lorsqu'il se trouve dans le dossier courant

3) Copie du fichier jar dans le dossier du projet en cours

4) Copie du fichier jar à l'emplacement standard des fichiers jar java (/usr / partager / java)

Cette solution est signalée pour la classe com.mysql.jdbc.Pilote dans mysql-connector-java.5-*.jar, fonctionnant sous linux avec OpenJDK version 1.7

 3
Author: Annonnymous Person, 2015-12-04 09:10:45

Montez en haut et supprimez l'instruction import s'il y en a une, puis réimportez la classe. Mais si ce n'est pas le cas, faites un nettoyage puis construisez. Utilisez-vous Netbeans ou Eclipse?

 2
Author: yams, 2013-07-01 16:04:57

J'ai également rencontré cela et essayé toutes les autres solutions. Je n'ai pas eu le .fichier de classe dans mon dossier HTML, je n'avais que le.fichier java. Une fois que j'ai ajouté .fichier de classe, le programme a bien fonctionné.

 2
Author: Jason Robertson, 2014-01-13 15:35:57
  1. Cela pourrait arriver si votre chemin de classe n'est pas correct

  2. Posons une classe sérialisable et une classe désérialisable sous le même nom de projet. Vous exécutez la classe serializable, en créant un objet serializable dans un dossier spécifique. Maintenant, vous avez besoin des données déséarialisées. En attendant, si vous changez le nom du projet, cela ne fonctionnera pas. Vous devez d'abord exécuter la classe serializable, puis désérialiser le fichier.

 2
Author: Omar Faroque Anik, 2014-02-10 22:24:51

Si vous utilisez maven essayez de maven mettre à jour tous les projets et forcer pour les instantanés. Il va également nettoyer et reconstruire tous les classpath.. Il a résolu mon problème..

 2
Author: ibrahimgunes, 2017-01-11 08:16:31

Je viens de le faire

1.Invalider les caches et redémarrer

2.Reconstruit mon projet, qui a résolu le problème

 2
Author: Jyoti JK, 2018-02-19 11:27:51

J'essayais de courir .jar du code C # en utilisant la classe Process. Le code java s'est exécuté avec succès à partir d'eclipse mais pas à partir de C # visual studio et même en cliquant directement sur le fichier jar, il s'est toujours arrêté avec ClassNotFoundException: exception. La solution pour moi, était d'exporter le programme java en tant que " Fichier JAR exécutable "au lieu de"Fichier JAR". J'espère que ça peut aider quelqu'un.

 1
Author: Dani Aya, 2018-02-14 13:24:33

Cela peut se produire sur Windows après une mise à jour java où l'ancienne version du SDK java est manquante et une nouvelle est présente. Je vérifierais si votreE utilise la version installée du SDK java (IntelliJ: CTRL + MAJ + ALT + S)

 1
Author: s5s, 2018-04-03 14:03:56

Si vous avez ajouté plusieurs (tierces)**bibliothèques et extensions * * Application classe

Alors cela pourrait se produire.

Pour cela, vous devez définir multiDexEnabled true et remplacez votre Application classe avec MultiDexApplication.

Il sera résolu.

 0
Author: Parth Patel, 2018-09-22 09:41:28

Mettez tout le code dans le bloc try puis catch exception dans un bloc catch

try
{
    // code
}
catch(ClassNotFoundException e1)
{
    e1.getmessage();
}
 -3
Author: sharukh, 2015-02-24 01:48:46