Correction de l'erreur Impossible de trouver ou de charger la classe principale en Java

Mohammad Irfan 12 octobre 2023
  1. Impossible de trouver l’erreur due à la transmission du mauvais nom en Java
  2. Impossible de trouver une erreur en raison d’un nom de package incorrect en Java
  3. Impossible de trouver l’erreur en raison d’un mauvais CLASSPATH en Java
Correction de l'erreur Impossible de trouver ou de charger la classe principale en Java

Ce didacticiel présente les erreurs de classe principale Impossible de trouver ou de charger en Java.

Supposons que nous ayons écrit un code et que nous l’ayons compilé. Jusqu’à présent, tout fonctionnait bien, mais lorsque nous l’avons finalement exécuté, une erreur est apparue.

could not find or load main class

Ce didacticiel explique pourquoi cette erreur se produit et comment la résoudre. Récapitulons d’abord comment nous exécutons un programme Java à l’aide de l’invite de commande.

Tout d’abord, nous compilons le code à l’aide de la commande javac comme ci-dessous :

javac<.java file name>

Après avoir exécuté la commande ci-dessus, un fichier avec l’extension .class est créé dans le dossier actuel.

Le fichier .class aura la même classe que le programme .java. On lance ensuite le fichier .class à l’aide de la commande suivante pour exécuter le code Java :

java<classname>

Nous pouvons obtenir l’erreur could not find or load main class. Cette erreur est une erreur d’exécution et se produit lorsque la machine virtuelle Java ne peut pas localiser la classe principale (classe contenant la méthode principale) que nous essayons d’exécuter.

Cette erreur se produit le plus souvent lors de l’exécution de nos programmes Java à l’aide de l’invite de commande. Avant de discuter des causes de cette erreur, comprenons d’abord CLASSPATH.

CLASSPATH en Java

Il s’agit de executable.class et d’autres fichiers de ressources.

La JVM l’utilise pour localiser les fichiers. Le CLASSPATH par défaut est le répertoire courant, sauf si nous définissons explicitement le CLASSPATH dans les variables système.

Pour exécuter un programme, nous devons passer le nom de la classe. Prenons l’exemple suivant pour illustrer le propos :

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

Commençons par le compiler à l’aide de la commande javac :

C :\Users\User\Documents\DelftStack\java
    > javac DelftStack.java C :\Users\USer\Documents\DelftStack\java
    >

Après l’exécution de la commande ci-dessus, un fichier DelftStack.class est créé dans notre répertoire courant. Exécutons ce fichier en utilisant la commande java.

C :\Users\User\Documents\DelftStack\java
    > java DelftStack.class Error : Could not find or load main class DelftStack.
class Caused by : java.lang.ClassNotFoundException : DelftStack.class

Ici, nous obtenons une erreur car nous essayons d’exécuter le fichier .class. Au lieu de cela, nous avons juste besoin de passer le nom de la classe.

Regardez ci-dessous:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

Impossible de trouver l’erreur due à la transmission du mauvais nom en Java

Le could not find or load the main class peut également se produire lorsque nous passons le mauvais nom de classe. En poursuivant l’exemple précédent, si nous essayons d’exécuter le programme avec le mauvais nom comme suit :

C :\Users\User\Documents\DelftStack\java > java DelftStac Error
    : Could not find or load main class DelftStac Caused by : java.lang.ClassNotFoundException
    : DelftStac

Nous obtenons l’erreur ci-dessus car nous avons mal orthographié le nom de la classe. Ici, la JVM essaie d’exécuter une classe nommée DelftStac, qui n’existe pas.

Nous pouvons résoudre ce problème en épelant correctement le nom de la classe comme suit :

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

Nous devons également noter ici que le nom de la classe est sensible à la casse. Si nous exécutons la classe Delftstack, nous aurons une erreur.

Regardez ci-dessous:

C :\Users\User\Documents\DelftStack\java > java Delftstack Error
    : Could not find or load main class Delftstack Caused by : java.lang.NoClassDefFoundError
    : Delftstack(wrong name
                 : Delftstack)

Nous devons utiliser l’orthographe correcte et les cas corrects pour exécuter un fichier avec succès.

Impossible de trouver une erreur en raison d’un nom de package incorrect en Java

Déplaçons notre classe DelftStack dans le package com.DelftStack. Un package est utilisé pour conserver ensemble des classes similaires.

Regardez le code suivant :

package com.DelftStack;

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

Pour compiler un package en Java, nous utilisons la commande suivante :

javac - d.<.java file name>

Le commutateur -d est utilisé pour indiquer où conserver le fichier de classe généré. Le . désigne le répertoire courant.

Nous compilons le code ci-dessus comme suit :

C :\Users\User\Documents\DelftStack\java > javac - d.DelftStack.java

Après avoir exécuté la commande ci-dessus, la structure de dossiers suivante est créée dans notre répertoire actuel.

com\DelftStack\DelftStack.class

Comme nous pouvons le voir, notre fichier de classe est situé à deux dossiers de notre répertoire actuel. Donc, si nous essayons d’exécuter notre fichier de classe comme nous le faisions dans les cas précédents, nous obtenons une erreur.

C :\Users\User\Documents\DelftStack\java > java DelftStack Error
    : Could not find or load main class DelftStack Caused by : java.lang.ClassNotFoundException
    : DelftStack

La raison de cette erreur est qu’aucune classe DelftStack n’existe dans notre dossier actuel. Pour exécuter la classe présente dans un package, il faut passer son nom complet (com.DelftStack.DelftStack dans ce cas).

C :\Users\User\Documents\DelftStack\java > java com.DelftStack.DelftStack Hello from DelftStack

Cela indique à Java de rechercher la classe dans le dossier com\DelftStack.

Impossible de trouver l’erreur en raison d’un mauvais CLASSPATH en Java

Le CLASSPATH indique à la JVM où se trouvent les fichiers .class.

Supposons que nous soyons actuellement dans un dossier différent et que nous souhaitions exécuter un programme Java dont le fichier de classe existe dans un dossier différent. Dans ce cas, nous pouvons passer l’emplacement du fichier de classe en utilisant l’option -classpath.

Par example:

java - classpath XYZ / ABC < class name
>

La commande ci-dessus indique à Java de rechercher le fichier .class dans le dossier ZYX/ABC.

Dans le cas précédent, nous avons créé un package.

Supposons que nous voulions exécuter le fichier dans le dossier com/DelftStack. En utilisant la commande suivante, nous pouvons le faire :

> java - classpath../../ com.DelftStack.DelftStack Hello from DelftStack

Le ../ signifie le répertoire parent. Donc ../../ signifie qu’il faut chercher deux niveaux de répertoire.

Prenons un autre exemple, supposons que nous soyons à l’emplacement du bureau (dossier) et que nous voulions exécuter un fichier de classe ailleurs sur l’ordinateur. Nous pouvons le faire ci-dessous.

> java - cp C :\Users\User\Documents\DelftStack\java com.DelftStack.DelftStack Hello from DelftStack

Le drapeau -cp est le raccourci pour -classpath. Ici, nous avons passé l’emplacement complet du dossier où le fichier .class est présent.

Article connexe - Java Error