85 votes

Comment exécuter les fichiers .class de Java ?

J'ai compilé un programme HelloWorld et j'utilise l'invite de commande pour l'exécuter. Le fichier .class s'appelle HelloWorld2.class

Le fichier est situé dans C:\Users\Matt\workspace\HelloWorld2\bin Voici ce que j'obtiens lorsque je vais à l'invite de commande et que je tape "Java HelloWorld2" :

C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
        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)
Could not find the main class: HelloWorld2.  Program will exit.

Je m'attendais à ce qu'un HelloWorld soit imprimé. Qu'est-ce qui ne va pas ? J'ai installé le JDK.

100voto

Isaac Truett Points 5858

Vous devez définir le chemin d'accès (classpath) pour trouver votre classe compilée :

java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2

47voto

kenorb Points 2464

Exécuter Fichier de classe Java à partir de la ligne de commande, la syntaxe est la suivante :

java -classpath /path/to/jars <packageName>.<MainClassName>

où le nom du paquet (qui commence généralement par com o org ) est le nom du dossier dans lequel se trouve votre fichier de classe.

Par exemple, si le nom de votre classe principale est App et que Nom du paquet Java de votre application est com.foo.app alors votre fichier de classe doit se trouver dans com/foo/app (un dossier séparé pour chaque point), de sorte que vous exécutez votre application en tant que :

$ java com.foo.app.App

Nota: $ est une invite de l'interpréteur de commandes, ignorez-la lorsque vous tapez

Si votre classe n'a pas de package défini, il suffit de l'exécuter en tant que : java App .

Si vous avez d'autres dépendances, assurez-vous d'avoir spécifié votre chemin d'accès soit avec -cp / -classpath ou en utilisant CLASSPATH qui pointe vers le dossier contenant votre bocal / guerre / oreille / fermeture éclair / classe fichiers. Ainsi, sous Linux, vous pouvez préfixer la commande par : CLASSPATH=/path/to/jars Sous Windows, vous devez ajouter le dossier à la variable système. S'il n'est pas défini, le chemin de la classe utilisateur est constitué du répertoire courant ( . ).


Exemple pratique

Étant donné que nous avons créé un projet d'exemple en utilisant Maven comme :

$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

et nous avons compilé notre projet en mvn compile dans notre my-app/ il générera notre fichier de classe dans le répertoire target/classes/com/foo/app/App.class .

Pour l'exécuter, nous pouvons soit spécifier le chemin de la classe via -cp ou d'y accéder directement, voir les exemples ci-dessous :

$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!

Pour vérifier le nom de votre classe et de votre paquetage, vous pouvez utiliser l'outil de désassemblage des fichiers de classe Java, par exemple :

$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
  public com.foo.app.App();
  public static void main(java.lang.String[]);
}

Nota: javap ne fonctionnera pas si le fichier compilé a été obscurci.

2voto

Federico Vera Points 1318

Cela peut signifier beaucoup de choses, mais la plus courante est que la classe contenue dans le fichier n'a pas le même nom que le fichier lui-même. Vérifiez donc si votre classe s'appelle également HelloWorld2.

-2voto

odunstory Points 5
  1. Allez dans le chemin où vous avez enregistré le fichier Java que vous voulez compiler.
  2. Remplacer le chemin en tapant cmd et appuyez sur la touche Entrée.
  3. Le répertoire de l'invite de commande s'affichera et contiendra le fichier de chemin d'accès comme suit C:/blah/blah/foldercontainJava
  4. Entrer javac javafile.java
  5. Appuyez sur Enter. Le fichier de classe Java sera automatiquement généré.

-4voto

Corni Points 70

Il faut mettre java en minuscules et ajouter .class !

java HelloWorld2.class

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X