J'essaie de lancer une application Java mais j'obtiens l'erreur suivante:
Java.lang.ClassNotFoundException:
Après les deux points vient l'emplacement de la classe qui manque. Cependant, je sais que cet endroit 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?
Votre chemin de classe est cassé (problème très courant dans le monde Java).
Selon le mode de démarrage de votre application, vous devez modifier l'argument en -cp
, votre entrée Class-Path dans MANIFEST.MF ou la structure de votre disque.
Un classpath est une liste d'emplacements pour charger des classes.
Ces "emplacements" peuvent être des répertoires ou 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 que je tente de charger une classe com.mycompany.Foo , elle recherchera un répertoire appelé com , puis sous un répertoire appelé mycompany , et enfin, il recherchera un fichier appelé Foo.class dans ce répertoire.
Dans le deuxième cas, pour les fichiers JAR, il recherchera le fichier JAR pour cette classe. Un fichier JAR est en réalité juste une collection zippée de répertoires comme ci-dessus. Si vous décompressez un fichier JAR, vous obtiendrez une multitude de répertoires et de fichiers de classe en suivant le schéma ci-dessus.
Ainsi, la machine virtuelle Java parcourt un chemin de classe du début à la fin en recherchant la définition de la classe lorsqu'elle tente de charger la définition de la classe. Par exemple, dans le classpath:
C:/myproject/classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
La machine virtuelle Java tente de rechercher dans le répertoire classes , puis dans stuff.jar et enfin dans otherstuff.jar .
Lorsque vous obtenez une exception ClassNotFoundException, cela signifie que la machine virtuelle Java a traversé l'intégralité du chemin d'accès aux classes et n'a pas trouvé la classe que vous avez tenté de référencer. La solution, comme cela arrive souvent dans le monde Java, consiste à vérifier votre classpath.
Vous définissez un chemin de classe sur la ligne de commande en disant Java -cp puis votre chemin de classe. Dans un IDE tel que Eclipse, vous aurez une option de menu pour spécifier votre chemin de classe.
C’est la meilleure solution j’ai trouvé jusqu’à présent.
Supposons que nous ayons un paquet nommé org.mypackage
contenant les classes:
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:
Lorsque nous appelons Java, nous spécifions le nom de l'application à exécuter: org.mypackage.HelloWorld
. Cependant, nous devons également indiquer à Java où chercher les fichiers et les répertoires définissant notre paquet. Donc, pour lancer le programme, nous devons utiliser la commande suivante:
NOTE: Vous devez exécuter la commande
Java
ci-dessus quelle que soit votre position actuelle. Mais ce n'est pas le cas pourjavac
. Pour en compilant, vous pouvez même aller directement dans le répertoire où vous avez vos fichiers.Java
et exécutez directementjavac ClassName.Java
.
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 tel que mentionné ici:
sous Windows
Java -classpath .;yourjar.jar YourMainClass
sous UNIX/Linux
Java -classpath .:yourjar.jar YourMainClass
Essayez-les si vous utilisez Maven. J'utilise maven pour mon projet et quand je fais mvn clean install
et que j'essaie de lancer un programme, il lève l'exception. Donc, je nettoie le projet et le lance à nouveau et cela fonctionne pour moi.
J'utilise Eclipse IDE.
Pour l'exception de classe introuvable lors de l'exécution du test Junit, essayez d'exécuter mvn clean test
une fois. Il va compiler toutes les classes de test.
Ajoutez le chemin complet du fichier jar au CLASSPATH . Sous Linux, utilisez: export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"
. Une autre façon de travailler (sans modifier le CLASSPATH) consistait à décompresser le fichier jar dans le dossier du projet en cours.
Les moyens n'ont pas fonctionné pour moi:
1) Utilisation de l’option -cp
avec le chemin complet du fichier jar.
2) Utiliser -cp
avec uniquement le nom du fichier jar lorsqu'il est situé dans le dossier actuel
3) Copier le fichier jar dans le dossier du projet en cours
4) Copier le fichier jar vers l’emplacement standard des fichiers jar Java (/ usr/share/Java)
Cette solution a été signalée pour la classe com.mysql.jdbc.Driver dans mysql-connector-Java.5 - *. Jar, fonctionnant sous Linux avec OpenJDK version 1.7
Utilisation ';' comme séparateur. Si vos variables d'environnement sont correctement définies, vous devriez voir vos paramètres. Si votre PATH et votre CLASSPATH sont corrects, Windows devrait reconnaître ces commandes. Vous n'avez PAS besoin de redémarrer votre ordinateur pour installer Java.
Pour ajouter l'emplacement d'une classe à votre chemin de classe via la ligne de commande, ajoutez simplement -cp
ou -classpath
et l'emplacement de la classe lors de son exécution. C'EST À DIRE.
Java -cp "c:/location/of/file" YourProgram
Ou, si vous exécutez un IDE tel qu'Eclipse, vous pouvez cliquer avec le bouton droit de la souris sur le project -> build path -> configure build path
.__ et ajouter le fichier JAR externe contenant votre classe au chemin de génération, alors tout devrait fonctionner correctement.
Je me suis aussi heurté à cela et j'ai essayé toutes les autres solutions. Je n'avais pas le fichier .class dans mon dossier HTML, je n'avais que le fichier .Java. Une fois que j'ai ajouté le fichier .class, le programme a bien fonctionné.
Cela peut arriver si votre chemin de classe n'est pas correct
Posons une classe sérialisable et une classe désérialisable sous le même nom de projet. Vous exécutez la classe sérialisable en créant un objet sérialisable dans un dossier spécifique. Vous avez maintenant besoin des données désattribuées. En attendant, si vous modifiez le nom du projet, cela ne fonctionnera pas. Vous devez d'abord exécuter la classe sérialisable, puis désérialiser le fichier.
Si vous utilisez maven Essayez de mettre à jour maven tous les projets et de forcer les instantanés . Il nettoiera également et reconstruira tous les classpath .. Cela résoudra mon problème ..
Montez en haut et supprimez l'instruction d'importation s'il en existe une, puis importez à nouveau la classe. Mais si ce n'est pas le cas, effectuez un nettoyage, puis construisez. Utilisez-vous Netbeans ou Eclipse?
Je viens de faire
1.Invalider les caches et redémarrer
2. Reconstruit mon projet qui a résolu le problème
Cela peut se produire sous 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 votre IDE utilise la version du SDK Java installée (IntelliJ: CTRL + SHIFT + ALT + S)
J'essayais d'exécuter .jar à partir de code C # en utilisant la classe Process
. Le code Java a été 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 une exception ClassNotFoundException:
. 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.
Si vous avez ajouté plusieurs bibliothèques (tiers) ** et extensions ** Application class
Ensuite, cela pourrait se produire.
Pour cela, vous devez définir multiDexEnabled true
et remplacer votre classe Application
étendue par MultiDexApplication
.
Ce sera résolu.
Question générique de base - Réponse générique la plus simple;)
Étant donné les informations, je pars du principe que vous essayez peut-être une approche de base en matière de codage, de construction/compilation et d’exécution d’une application console simple telle que "Hello World", en utilisant un simple éditeur de texte et un certain Command Shell.
Cette erreur se produit dans le scénario suivant:
..\SomePath>javac HelloWorld.Java
..\SomePath>Java HelloWorld.class
En d'autres termes, utilisez:
..\SomePath>Java HelloWorld
P.S. L'ajout de l'extension de fichier .class produit la même erreur . Assurez-vous également que le dossier bin de Java (JDK/JRE) se trouve dans le chemin PATH des variables d'environnement du système d'exploitation (recherchez d'autres détails à ce sujet). PPS Ai-je raison dans mes hypothèses?