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!!");
}
}
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
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.
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!!
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
:
echo $CLASSPATH
echo %CLASSPATH%
qui a des entrées séparées par :
.
Voir aussi: Comment exécuter les fichiers Java .class?
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
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 .
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
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
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 /.
fait face au même problème. résolu en suivant ces étapes
Java org.tij.exercises.HelloWorld
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é.
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.
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
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.