web-dev-qa-db-fra.com

"Impossible de trouver ou de charger la classe principale" Erreur lors de l'exécution du programme Java à l'aide de l'invite cmd

Je lance un simple programme "HelloWorld". Je reçois cette erreur dans l'invite de commande:

Impossible de trouver ou de charger la classe principale HelloWorld.

J'ai défini les variables CLASSPATH et PATH dans le système. Dans l'invite cmd, je suis en cours d'exécution à partir du répertoire dans lequel j'ai enregistré le programme HelloWorld. Je peux voir que le nom de la classe et le nom du fichier sont les mêmes et que le fichier .class est créé dans le même répertoire. Quoi d'autre pourrait être le problème?

Mon exemple de programme ressemble à ceci:

package org.tij.exercises;
public class HelloWorld {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World!!");
  }
}
31
user241702

Lorsque la classe Main est dans un package, vous devez l'exécuter comme suit: 

Java <packageName>.<MainClassName>

Dans votre cas, vous devez exécuter le programme comme suit: 

Java org.tij.exercises.HelloWorld 
37
Kakarot

Quelle est votre valeur CLASSPATH?

Cela peut ressembler à ceci: 

 .;%Java_HOME%\lib\dt.jar;%Java_HOME%\lib\tools.jar 

Je suppose que votre valeur ne contient pas ce .;

Donc, AJOUTER IT .
Lorsque vous avez terminé, restart CMD

Cela peut fonctionner.


Par exemple, le fichier HelloWorld.Java se trouve dans chemin: D:\myjavatest\org\yz\test et sa package est: org.yz.test.

Vous êtes maintenant dans le chemin D:\myjavatest\ sur la ligne CMD.
Tapez ceci pour le compiler: 

javac org/yz/test/HelloWorld.Java

Ensuite, tapez ceci pour l'exécuter: 

Java org.yz.test.HelloWorld

Vous pouvez obtenir ce que vous voulez. 

18
youngzy

J'ai supprimé bin de la CLASSPATH. J'ai découvert que j'exécutais la commande Java à partir du répertoire où se trouve le HelloWorld.Java, c'est-à-dire:

C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>Java HelloWorld

Je suis donc retourné dans le répertoire principal et exécuté:

Java org.tij.exercises.HelloWorld

et cela a fonctionné, à savoir:

C:\Users\xyz\Documents\Java\javastudy\src>Java org.tij.exercises.HelloWorld

Bonjour le monde!!

12
user241702

Puisque vous l'exécutez à partir de l'invite de commande, vous devez vous assurer que votre classpath est correct. Si vous l'avez déjà défini, vous devez redémarrer votre terminal pour recharger vos variables système.

Si -classpath et -cp ne sont pas utilisés et que CLASSPATH n'est pas défini, le répertoire en cours est utilisé (.). Toutefois, lorsque vous exécutez des fichiers .class, vous devez vous trouver dans le dossier constitué de nom du package Java dossiers.

Donc, avec le fichier .class dans ./target/classes/com/foo/app/App.class, vous avez les possibilités suivantes:

Java -cp target/classes com.foo.app.App
CLASSPATH=target/classes Java com.foo.app.App
cd target/classes && Java com.foo.app.App

Vous pouvez vérifier votre chemin de classe en imprimant la variable CLASSPATH:

  • Linux: echo $CLASSPATH
  • Windows: echo %CLASSPATH%

qui a des entrées séparées par :.

Voir aussi: Comment exécuter les fichiers Java .class?

4
kenorb

Une des raisons de cette erreur pourrait être

Impossible de trouver ou de charger la classe principale <class name>

Peut-être que vous utilisez votre nom de classe sous un nom différent et que vous enregistrez le nom de classe avec un autre nom, vous pouvez enregistrer un nom de fichier source Java sous un autre nom que le nom de classe. Par exemple:

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

vous pouvez enregistrer en tant que Hello.Java mais,

Pour compiler: javac Hello.Java 

Cela générera automatiquement un fichier A.class au même endroit.

Maintenant à courir: Java A

3
Adnan

J'ai eu le même problème, le mien était un peu différent même si je n'avais pas de nom de paquet. Mon problème était le chemin de classe par exemple:

C:\Java Example>Java -cp . HelloWorld 

L'option -cp pour Java et d'après ce que je peux dire de mon expérience (pas beaucoup) mais j'ai rencontré l'erreur environ 20 fois en essayant différentes méthodes et jusqu'à ce que je déclare la classe Path, je recevais la même erreur. Vishrant avait raison de dire cela. représente le répertoire courant. 

Si vous avez besoin de plus d'informations sur les options Java, saisissez Java -? ou Java -help. Je pense que les options ne sont pas facultatives.

Je viens de faire quelques recherches. J'ai trouvé un site Web qui décrit en détail CLASSPATH. La CLASSPATH doit être définie en tant que variable d'environnement; dans le répertoire actuel <.>. Vous pouvez le définir à partir de la ligne de commande dans Windows:

// Set CLASSPATH to the current directory '.'
Prompt> set CLASSPATH=.

Lorsque vous ajoutez un nouveau paramètre d'environnement, vous devez redémarrer avant d'activer la variable. Mais à partir de l'invite de commande, vous pouvez le définir. Il peut également être réglé comme je l'ai mentionné au début. Pour plus d'informations et si vous utilisez un système d'exploitation différent, vérifiez: Variables d'environnement .

3
outlooker

J'obtenais exactement la même erreur pour avoir oublié de supprimer l'extension .class lors de l'exécution de la classe Java. Donc au lieu de cela:

Java myClass.class

On devrait faire ceci:

Java myClass
2
Darush

J'ai eu un problème similaire lors de l'exécution de Java sur win10

au lieu de 

$ Java ./hello
Error: Could not find or load main class ..hello

Courir

$ Java hello
Hello, World
2
pev.hall

Exécutez votre programme Java en utilisant la commande Java -d . HelloWorld.

Cette commande fonctionne lorsque vous avez déclaré package.

. représente le répertoire en cours /. 

2
Vishrant

fait face au même problème. résolu en suivant ces étapes

  • allez dans le répertoire contenant le paquet 'org.tij.exercises' (par exemple: dans Eclipse, cela peut être votre dossier src)
  • utiliser Java org.tij.exercises.HelloWorld
0
Maria

J'ai utilisé IntelliJ pour créer mon fichier .jar, qui comprenait des fichiers jar déballés de mes bibliothèques. L'un de ces autres pots contenait des éléments signés dans MANIFEST qui empêchaient le chargement du fichier .jar. Aucun avertissement, ou quoi que ce soit, n'a tout simplement pas fonctionné. Could not find or load main class

Retirer le pot non emballé contenant le manifeste l'a corrigé.

0
Sam Barnum

Pour beaucoup d'entre nous, du moins pour moi, je pense que la hiérarchie des chemins de classes n'est pas intuitive car je travaille dans une structure de répertoires et il me semble que cela devrait l'être. 

Java examine le nom de la classe en fonction de son chemin de package, pas seulement du chemin de fichier. 

Peu importe si: Je suis dans le répertoire local ./packagefoo/MainClass, ou dans Un répertoire dans ./packagefoo/, ou dans Un dans ./packagefoo/MainClass/foo.

La commande "Java packagefoo.MainClass" s'exécute à partir de la racine% CLASSPATH%, ce qui signifie quelque chose d'important pour Java. Ensuite, à partir de là, il parcourt les noms de paquets, pas les noms de chemins comme le voudraient les codeurs profanes. 

Donc, si mon CLASSPATH est défini sur% CWD% /, alors "Java packagefoo.MainClass" fonctionnera. Si je règle CLASSPATH sur% CWD%/packagefoo /, packagefoo.MainClass est introuvable. Toujours "Java MainClass" ne veut rien dire, si c'est un membre de "package", jusqu'à ce que je déchire le code Java "package packagefoo;" et déplacez le fichier de classe dans un répertoire. 

En fait si je change "package packagefoo;" pour "emballer le paquetage;" Je dois créer un sous-dossier sous CLASSPATH/foopackage ou foopackage.MainClass cesse de fonctionner à nouveau. 

Pour aggraver les choses, entre PATH, CLASSPATH, JAVAHOME pour Windows, JDeveloper, Oracle Database, et chaque nom d'utilisateur sous lequel il a été installé, je pense qu'un codeur essayant d'obtenir quelque chose de rapide aboutit à un forçage forcé des variables de chemin et de la structure fonctionne sans comprendre ce que cela signifie.

au moins je l'ai fait. 

0
phydroxide

Créez un dossier org/tij/exercices, puis déplacez le fichier HelloWorld.Java. Puis lancez la commande ci-dessous

javac -cp . org/tij/exercises/HelloWorld.Java

ET

Java -cp . org/tij/exercises/HelloWorld
0
Ashwin Shetty

J'ai rencontré le même problème et essayé tout ce qui est mentionné ici. Le problème, c’est que je n’ai pas actualisé mon projet dans Eclipse après la création de la classe… .. Et une fois que j’ai rafraîchi, les choses ont fonctionné comme prévu.

0
decoder