Corrigé: Impossible de trouver ou de charger la classe principale

L'erreur ' Impossible de trouver ou de charger la classe principale ' se produit lors de l'utilisation d'une commande java dans l'invite de commande pour lancer un programme Java en spécifiant le nom de la classe dans le terminal. Cela s’explique principalement par l’erreur de programmation de l’utilisateur lors de la déclaration de la classe.

Impossible de trouver ou de charger la classe principale - ligne de commande Java

Comme mentionné précédemment, cette erreur n’est généralement pas liée au système et l’utilisateur commet une erreur dans plusieurs scénarios, comme indiqué ci-dessous. Avant de poursuivre, nous supposons que vous avez une connaissance de base du langage de programmation Java et de son fonctionnement.

Qu'est-ce qui cause l'erreur 'Impossible de trouver ou de charger la classe principale' en Java?

Le message 'Impossible de trouver ou de charger la classe principale' signifie que la première étape du moteur Java, extrayant la classe pour exécution, a échoué. La commande java n'a pas pu localiser la classe dans le bon répertoire.

Dans certains cas, vous devez ajouter le chemin de fichier correct et pointer le terminal Java vers le bon emplacement. Étant donné que vous exécutez la commande à partir du terminal en ligne de commande, l’ordinateur ne sait pas où se trouve la classe ni où elle se trouve. Dans les IDE ciblés, ce n'est pas le problème car l'EDI garde un pointeur pointant vers le répertoire de travail en cours.

Qu'est-ce que la syntaxe 'java'?

Avant de commencer à identifier les raisons pour lesquelles le terminal nous renvoie une erreur lors de l’exécution, nous devons d’abord examiner la syntaxe de la commande. Si vous n'utilisez pas la syntaxe correcte, vous serez inévitablement confronté à cette erreur.

La syntaxe normale de la commande ressemble à ceci:

 java [...] [...] 

Voici une option de ligne de commande, un nom de classe Java pleinement qualifié et un argument de ligne de commande transmis à votre application lors de la compilation du package complet.

Voici un exemple de commande valide:

 java -Xmx100m com.acme.example.ListAppuals kevin arrows bart 

La commande ci-dessus obligera la commande java à exécuter les opérations suivantes:

  • Il recherchera une version compilée de la classe ' com.acme.example.ListAppuals '.
  • Après la recherche, il chargera la classe.
  • Ensuite, lorsque la classe est chargée, la classe sera recherchée pour une méthode 'main' avec une signature valide, des modificateurs et un type de retour. Un exemple de classe principale ressemblerait à quelque chose comme:
 public static void main (String []) 
  • La méthode sera appelée avec les arguments 'kevin', 'flèches' et 'bart' sous la forme de chaîne [].

Comment réparer 'Impossible de trouver ou de charger la classe principale'

Solution 1: vérification de l'argument du nom de classe

L'erreur la plus courante des utilisateurs est de fournir un nom de classe incorrect en tant qu'argument (ou un nom de classe correct est un formulaire incorrect). Puisque nous déclarons des paramètres sur la ligne de commande, il est fort probable que vous passiez l'argument du nom de classe sous une forme incorrecte. Ici, nous allons lister tous les scénarios possibles dans lesquels vous pouvez faire une erreur.

  • Écrire un nom de classe simple . Si vous déclarez la classe dans un package tel que 'com.acme.example', vous devez utiliser le nom de classe complet, y compris le package, dans la commande Java.
 java com.acme.example.ListAppuals 

au lieu de

 java ListAppuals 
  • Vous devez déclarer un nom de classe au lieu de déclarer un nom de fichier ou un chemin. Java ne récupère pas la classe si vous déclarez un chemin / un nom de fichier pour elle. Les entrées incorrectes incluent les éléments suivants:
 java ListAppuals.class java com / acme / exemple / ListAppuals.class 
  • Le boîtier doit être pris en compte. Les commandes Java sont sensibles à la casse et si vous commettez une erreur, même d'une lettre, vous ne pourrez pas charger la classe principale. Voici un exemple d' erreurs incorrectes :
 java com.acme.example.listappuals 
  • Vous ne devriez pas déclarer un nom de fichier source . Comme mentionné précédemment, il vous suffit de déclarer la classe dans le format de nom de classe complet correct. Exemple d'erreur:
 java ListAppuals.java 
  • Cette erreur se produira également si vous faites une faute de frappe ou oubliez d'écrire le nom de la classe entièrement .

Si vous avez commis des erreurs négligentes en déclarant le nom de la classe, assurez-vous de le réparer, puis essayez de lancer le programme.

Solution 2: Vérification du chemin de classe

Si vous avez déclaré le nom de classe correctement mais que l'erreur est toujours affichée, il est probable que la commande java ne puisse pas trouver le nom de classe spécifié dans le chemin. Le chemin d'accès aux classes est un chemin dans lequel le moteur d'exécution Java recherche des fichiers de ressources et de classes. Vous pouvez facilement définir le classpath à l'aide de deux commandes différentes, comme indiqué ci-dessous:

 C:> sdkTool -classpath classpath1; classpath2 ... C:> set CLASSPATH = classpath1; classpath2 ... 

Pour en savoir plus sur le classpath, vous devriez consulter les documents suivants.

Documentation de la commande Java

Définition du chemin de classe

Solution 3: Vérification du répertoire

Lorsque vous déclarez un répertoire en tant que chemin de classe, il correspond toujours à la racine de l'espace de noms. Par exemple, si «/ usr / local / acme / classes» figure dans le chemin de classe, Java recherchera une classe «com.acme.example.Appuals». Il cherchera une classe avec le chemin suivant:

 /usr/local/acme/classes/com/acme/example/Appuals.class 

Donc, en gros, si vous mettez l'adresse suivante dans le chemin de classe, Java ne pourra pas trouver la classe:

 / usr / local / acme / classes / com / acme / exemple 

Vous devez également vérifier votre sous - répertoire et voir s'il correspond au FQN. Si votre classe FQN est "com.acme.example.Appuals", Java recherchera alors un "Appuals.class" dans le répertoire "com / acme / example".

Pour vous donner un exemple, supposons le scénario suivant:

  • La classe que vous souhaitez exécuter est: com.acme.example.Appuals
  • Le chemin d'accès complet est: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Le répertoire de travail actuel est: / usr / local / acme / classes / com / acme / exemple /

Ensuite, les scénarios suivants seraient valables:

 # mauvais, FQN est nécessaire java Appuals # faux, il n'y a pas de dossier `com / acme / example` dans le répertoire de travail actuel java com.acme.example.Appuals # faux, semblable au scénario ci-dessus java -classpath. com.acme.example.Appuals # OK; un chemin de classe relatif est défini à java -classpath ../../ .. com.acme.example.Appuals # OK; un chemin de classe absolu est défini java -classpath / usr / local / acme / classes com.acme.example.Appuals 

Remarque: Le chemin d'accès aux classes doit également inclure toutes les autres classes (non système) nécessaires à vos applications.

Solution 4: Vérification du package de classe

Si toutes les solutions ci-dessus sont valables dans votre cas, vous devez vous assurer que votre code source est placé dans le bon dossier. En outre, vous avez correctement déclaré le package . Si vous exécutez votre code avec un IDE, il vous informera probablement du problème. Cependant, dans notre cas, puisque nous l'exécutons à l'invite de commande, l'erreur passera inaperçue et vous obtiendrez l'erreur de classe en discussion.

Des Articles Intéressants