Comment exécuter une classe Java à partir de la ligne de commande

J’ai une classe Java compilée:

Echo.class

public class Echo { public static void main (Ssortingng arg) { System.out.println(arg); } } 

Je cd au répertoire et entrez: java Echo "hello"

Je reçois cette erreur:

 C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello" Exception in thread "main" java.lang.NoClassDefFoundError: Echo Caused by: java.lang.ClassNotFoundException: Echo at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) Could not find the main class: Echo. Program will exit. 

Quelle est la manière la plus simple d’obtenir mon code Java sous une forme que je peux exécuter depuis la ligne de commande pour utiliser l’IDE ​​Eclipse?

Essayer:

 java -cp . Echo "hello" 

En supposant que vous avez compilé avec:

 javac Echo.java 

Il y a une chance que le répertoire “current” ne soit pas dans votre classpath (où java recherche les définitions .class)

Si tel est le cas et répertoriant le contenu de votre répertoire affiche:

 Echo.java Echo.class 

Alors tout cela peut fonctionner:

 java -cp . Echo "hello" 

ou

 SET CLASSPATH=%CLASSPATH;. java Echo "hello" 

Et plus tard, comme Fredrik le fait remarquer, vous aurez un autre message d’erreur comme.

Exception dans le thread “main” java.lang.NoSuchMethodError: main

Quand cela arrive, va lire sa réponse 🙂

Vous devez spécifier le classpath. Cela devrait le faire:

 java -cp . Echo "hello" 

Cela dit à java d’utiliser . (le répertoire courant) comme chemin de classe, c’est-à-dire l’endroit où il recherche les classes. Notez que lorsque vous utilisez des packages, le classpath doit contenir le répertoire racine, pas les sous-répertoires du package. Par exemple, si votre classe est my.package.Echo et que le fichier .class est bin/my/package/Echo.class , le répertoire correct du classpath est bin .

Vous n’avez pas de méthode principale valide … La signature doit être: public static void main ( Ssortingng [] args);

Par conséquent, dans votre cas, le code devrait ressembler à ceci:

 public class Echo { public static void main (Ssortingng[] arg) { System.out.println(arg[0]); } } 

Edit: S’il vous plaît noter que Oscar a également raison en ce que vous êtes manquant. dans votre classpath, vous rencontrerez le problème que je résoudrai après avoir traité cette erreur.

Il pourrait y avoir plusieurs problèmes: voici un tutoriel qui devrait vous permettre de démarrer: Exécuter Java en tant qu’application de ligne de commande .

Ma situation était un peu compliquée. J’ai dû faire trois étapes depuis que j’utilisais un fichier .dll dans le répertoire des ressources, pour le code JNI. Mes fichiers étaient

 S:\Accessibility\tools\src\main\resources\dlls\HelloWorld.dll S:\Accessibility\tools\src\test\java\com\accessibility\HelloWorld.class 

Mon code contenait la ligne suivante

 System.load(HelloWorld.class.getResource("/dlls/HelloWorld.dll").getPath()); 

Tout d’abord, j’ai dû passer au répertoire classpath

 cd /D "S:\Accessibility\tools\src\test\java" 

Ensuite, j’ai dû modifier le chemin de classe pour qu’il pointe vers le répertoire actuel afin que ma classe soit chargée et que je devais changer le chemin de classe pour qu’il pointe vers le répertoire de ressources afin que ma DLL soit chargée.

 set classpath=%classpath%;.;..\..\..\src\main\resources; 

Ensuite, j’ai dû exécuter java en utilisant le nom de classe.

 java com.accessibility.HelloWorld 

Si vous avez dans votre source java

 package mypackage; 

et votre classe est hello.java avec

 public class hello { 

et dans ce bonjour.java vous avez

  public static void main(Ssortingng[] args) { 

Puis (après la compilation) changeDir (cd) dans le répertoire où se trouve votre hello.class. alors

 java -cp . mypackage.hello 

Observez le répertoire en cours et le nom du package avant le nom de la classe. Cela fonctionne pour mon Linux sur menthe et j’espère sur les autres os aussi

Merci Stack débordement pour une mine d’informations.

Tout d’abord, avez-vous compilé la classe en utilisant le compilateur javac en ligne de commande? Deuxièmement, il semble que votre méthode principale ait une signature incorrecte – elle devrait prendre un tableau d’objects Ssortingng, plutôt qu’un seul:

 public static void main(Ssortingng[] args){ 

Une fois que vous avez modifié votre code pour inclure un tableau d’objects Ssortingng, vous devez vous assurer que vous imprimez un élément du tableau, plutôt que le tableau lui-même:

 System.out.println(args[0]) 

Si vous voulez imprimer la liste complète des arguments de la ligne de commande, vous devrez utiliser une boucle, par exemple

 for(int i = 0; i < args.length; i++){ System.out.print(args[i]); } System.out.println();