Impossible de trouver ou de charger l'erreur de classe principale

1. Introduction

Parfois, lorsque nous exécutons un programme Java, nous pouvons voir «Impossible de trouver ou de charger la classe principale». Il est facile de deviner la raison: la JVM n'a pas réussi à trouver la classe principale et a donné cette erreur. Mais pourquoi pas?

Dans ce didacticiel, nous discuterons des raisons probables de l'échec de la recherche de la classe principale. Nous verrons également comment les résoudre.

2. Exemple de programme

Nous allons commencer par un programme HelloWorld :

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

Maintenant, compilons-le:

$ javac HelloWorld.java

Ici, le compilateur générera un fichier .class pour notre programme. Ce fichier .class sera généré dans le même répertoire. Le fichier .class aura le même nom que le nom de classe donné dans le programme Java. Ce fichier .class est exécutable.

Dans les sections suivantes, nous allons exécuter ce fichier .class et essayer de comprendre les raisons probables de l'erreur «Impossible de trouver ou de charger la classe principale».

3. Nom de classe incorrect

Pour exécuter un fichier .class généré par le compilateur Java, nous pouvons utiliser la commande ci-dessous:

java 

Maintenant, exécutons notre programme:

$ java helloworld Error: Could not find or load main class helloworld

Ouais, il a échoué avec l'erreur «Impossible de trouver ou de charger la classe principale helloworld».

Comme indiqué précédemment, le compilateur générera le fichier .class avec exactement le même nom donné à la classe Java dans le programme . Donc dans notre cas, la classe principale portera le nom HelloWorld , pas helloworld .

Faisons un essai de plus avec un boîtier correct:

$ java HelloWorld Hello world..!!!

Cette fois, il a fonctionné avec succès.

3.1. Extension de fichier

Pour compiler un programme Java, nous devons fournir le nom du fichier avec son extension (. Java ):

$ javac HelloWorld.java

Mais pour exécuter un. class file, nous devons fournir le nom de la classe, pas le nom du fichier. Il n'est donc pas nécessaire de fournir l' extension .class :

$ java HelloWorld.class Error: Could not find or load main class HelloWorld.class

Donc, encore une fois, exécutons notre programme en utilisant le nom de classe correct:

$ java HelloWorld Hello world..!!!

4. Noms des packages Java

En Java, nous conservons des classes similaires ensemble dans ce que nous appelons un package .

Let move HelloWorld classe dans le com.baeldung package:

package com.baeldung; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

Maintenant, compilons et exécutons le programme HelloWorld mis à jour comme avant:

$ java HelloWorld Error: Could not find or load main class HelloWorld

Mais encore une fois, nous obtenons l'erreur «Impossible de trouver ou de charger la classe principale HelloWorld»!

Essayons de comprendre ce que nous avons manqué ici.

Pour exécuter une classe Java qui se trouve dans un package, nous devons fournir son nom complet . Donc, dans notre cas, le nom complet de HelloWorld est com.baeldung.HelloWorld .

Maintenant, lorsque nous avons créé le package com.baeldung , nous avons en fait créé une structure de dossiers comme:

com/baeldung/HelloWorld.java

Tout d'abord, essayons d'exécuter notre programme à partir du répertoire com / baeldung :

$ java com.baeldung.HelloWorld Error: Could not find or load main class com.baeldung.HelloWorld

Pourtant, nous ne sommes pas en mesure d'exécuter notre programme.

Ici, lorsque nous avons spécifié le nom de classe complet com.baeldung.HelloWorld , Java a essayé de trouver le fichier HelloWorld.class dans com / baeldung , sous le répertoire à partir duquel nous exécutions le programme.

Comme nous étions déjà dans com / baeldung , Java n'a pas réussi à trouver et à exécuter le programme HelloWorld .

Maintenant, retournons au dossier parent et exécutons-le:

$ java com.baeldung.HelloWorld Hello world..!!!

Oui, nous pouvons à nouveau dire «Bonjour» au monde.

5. Chemin de classe non valide

Avant d'aller de l'avant, voyons d'abord quel est le chemin de classe - c'est l'ensemble des classes disponibles pour notre JVM en cours d'exécution.

Nous utilisons la variable classpath pour indiquer à la JVM où trouver les fichiers .class sur le système de fichiers.

Lors de l'exécution d'un programme, nous pouvons fournir le classpath en utilisant l' option -classpath . exemple:

java -classpath /my_programs/compiled_classes HelloWorld

Ici, Java recherchera le fichier HelloWorld.class dans le dossier / my_programs / compiled_classes , un dossier dont nous venons de créer le nom. Par défaut, la variable classpath est définie sur «.», Ce qui signifie le répertoire courant.

Dans la section ci-dessus, nous avons changé notre répertoire pour exécuter notre programme. Mais que faire si nous voulons l'exécuter à partir d'un autre dossier? C'est là que la variable classpath nous aide.

Pour exécuter notre programme à partir du répertoire com / baeldung, nous pouvons simplement indiquer que notre chemin de classe est composé de deux répertoires - un pour chaque partie du package:

$ java -claspath ../../ com.baeldung.HelloWorld Hello world..!!!

Ici, «..» représente le répertoire parent. Dans notre cas, «../../» représente le sommet de notre hiérarchie de paquets.

6. Conclusion

Dans ce didacticiel, nous avons appris les raisons probables de l'erreur «Impossible de trouver ou de charger la classe principale».

Ensuite, bien sûr, nous avons également appris à résoudre cette erreur.