Erreur «Could not find or load main class» en Java : guide pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

«Could not find or load main class» : la peur familière de tout débutant en Java

\n\n

Vous venez de commencer à apprendre Java, vous avez écrit votre premier HelloWorld.java, le cœur battant, vous appuyez sur Entrée dans le terminal… Et au lieu du message de bienvenue tant attendu, vous voyez ce message glacial :

\n\n
Error: Could not find or load main class HelloWorld\nCaused by: java.lang.ClassNotFoundException: HelloWorld
\n\n

Ça vous parle ? Si oui, vous n'êtes pas seul. Cette question sur Stack Overflow a cumulé des millions de vues et détient le record absolu parmi les erreurs des développeurs Java débutants. Bonne nouvelle : la cause est presque toujours banale, et la solution prend 30 secondes. Mauvaise nouvelle : si vous ne comprenez pas pourquoi cela s'est produit, l'erreur vous hantera encore et encore.

\n\n

Dans cet article, nous allons décortiquer toutes les causes possibles de l'apparition de «Could not find or load main class» avec des exemples concrets. Vous apprendrez non seulement à corriger l'erreur, mais aussi à comprendre comment Java recherche votre classe. C'est parti !

\n\n

L'essentiel en bref : que cherche à dire la JVM ?

\n\n

Lorsque vous tapez java NomDeLaClasse, la machine virtuelle Java (JVM) reçoit l'ordre : « Trouve la classe portant ce nom et exécute sa méthode main ». Si la JVM ne trouve pas le fichier .class avec le bon nom ou ne trouve pas la méthode main correcte à l'intérieur, elle panique et affiche cette erreur.

\n\n

Il est important de comprendre : Java fonctionne avec du bytecode (fichiers .class), pas avec le code source (.java). Vous compilez d'abord le fichier .java en .class avec la commande javac, puis vous exécutez le fichier .class avec la commande java. Si quelque chose cloche à la deuxième étape, vous obtenez cette fameuse erreur.

\n\n

Scénario 1 : Vous avez oublié de compiler le fichier

\n\n

La cause la plus fréquente, surtout chez ceux qui viennent d'ouvrir un terminal. Vous tapez :

\n\n
java HelloWorld
\n\n

Mais vous n'avez pas exécuté au préalable :

\n\n
javac HelloWorld.java
\n\n

Sans compilation, le fichier HelloWorld.class n'existe tout simplement pas. La JVM essaie honnêtement de le trouver, mais ne le trouve pas et affiche l'erreur.

\n\n

Comment vérifier ?

\n
    \n
  • Regardez dans le dossier actuel : le fichier HelloWorld.class est-il présent ?
  • \n
  • Si seul HelloWorld.java est présent, compilez-le.
  • \n
  • Si aucun des deux n'est présent, vérifiez que vous êtes dans le bon répertoire.
  • \n
\n\n

Scénario 2 : Faute de frappe dans le nom de la classe (la casse compte !)

\n\n

Java est un langage fortement typé et sensible à la casse. Si votre classe s'appelle HelloWorld et que vous tapez :

\n\n
java helloworld\njava HelloWorld.class\njava HelloWorld.java
\n\n

— la JVM ne vous comprendra pas. Le nom de la classe doit correspondre au nom du fichier à la lettre près. Oui, HelloWorld et helloworld sont des noms différents pour la JVM.

\n\n
\n 🔥 Astuce : N'écrivez jamais .class ou .java dans la commande java. Utilisez uniquement le nom de la classe, sans extension !\n
\n\n

Scénario 3 : Problèmes avec le package (le piège le plus vicieux)

\n\n

Dès que vous commencez à utiliser des packages, les règles du jeu changent. Supposons que vous ayez le fichier :

\n\n
// Fichier : src/com/pythonlib/MyApp.java\npackage com.pythonlib;\n\npublic class MyApp {\n    public static void main(String[] args) {\n        System.out.println("Bonjour de PythonLib !");\n    }\n}
\n\n

Beaucoup de débutants font ceci :

\n\n
cd src\njavac com/pythonlib/MyApp.java   // la compilation réussit\njava MyApp                        // ERREUR !
\n\n

Pourquoi ? Parce que le nom complet de la classe est maintenant com.pythonlib.MyApp, et pas simplement MyApp. La JVM recherche la classe par son nom complet

Blogs

Book Recommendations