Comment puis-je exécuter une classe Java dans un paquet?
J'ai deux classes java comme suit
App1
sans un package:
class App1 {
public static void main(String[] args) {
System.out.println("App1 hello world...");
}
}
App2
dans un package:
package java.java.package1;
class App2 {
public static void main(String[] args) {
System.out.println("App2 hello world...");
}
}
Je peux compiler tous les deux:
D:\javaTest>javac App1.java
D:\javaTest>javac App2.java
Cependant, je ne peux exécuter la première:
D:\javaTest>java App1
App1 hello world...
D:\javaTest>java java.java.package1.App2
Exception in thread "main" java.lang.NoClassDefFoundError: java/java/package1/App2
Caused by: java.lang.ClassNotFoundException: java.java.package1.App2
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: java.java.package1.App2. Program will exit.
Comment puis-je exécuter App2
?
OriginalL'auteur gezhonglunta | 2012-06-14
Vous devez vous connecter pour publier un commentaire.
Si vous mettez le source dans une hiérarchie de répertoire correspondant au nom de paquet (
D:\javaTest\java\java\package1\App1.java
), et de compiler/exécuter à partir de la racine de la hiérarchie (D:\javaTest
), vous n'auriez pas ce problème:Vous pouvez également compiler à l'aide de la
-d
option, de sorte que les classes sont déplacés dans une hiérarchie de répertoires:Remarque vous ne devriez pas utiliser un nom de package de départ avec
java
, et plus tard les versions du JDK va lancer une SecurityException. Voir cette question pour plus d'informations./
au lieu de.
. Lorsque vous exécutez le programme, c'est inversé: l'utilisation.
au lieu de/
.OriginalL'auteur Jon Skeet
Vous devez mettre
-d directory
Options..parce queOriginalL'auteur Sumit Singh
App2 doit être en java/java/package1 répertoire. En java, le nom du package et le répertoire du code source doivent correspondre. N'avez-vous pas obtenir une erreur de compilation?
OriginalL'auteur Mainguy
Vous créez un nouveau répertoire. C'est le répertoire contenant votre travail, et n'est pas le début de votre colis.
Par exemple, j'ai créer un dossier /terri pour commencer.
J'ai ensuite créer la structure de dossiers /clarie/andrea dessous.
Mon colis va être appelé claire.andrea dans cet exemple.
Package Normal les noms commencent par com et ensuite un nom d'entreprise ou quelque chose comme ça (ou java pour java standard de paquets, afin de ne pas l'utiliser: comme java.lang.*).
Dans le andrea dossier, j'ai créer un fichier java appelé Saluton.java avec la classe Saluton (qui vient d'impression bonjour). Le nom de la classe et le nom du fichier doit correspondre.
À compiler, à partir du terri/dossier: javac .\claire\andrea\Saluton.java
Cela va créer une Saluton.class dans le \terri\claire\andrea\Saluton.class
À courir: (nouveau à partir de /terri), je n': java -cp . claire.andrea.Saluton
Qui dit, l'utilisation du chemin de classe de mon répertoire en cours.
Mon programme principal se trouve dans le package claire.andrea et le nom de la Classe est Saluton.
Voici le run:
\terri
java -cp . claire.andrea.Saluton
"Hello World".
Pour résumer, le nom du package beaucoup de match de la sous-tendent la structure de répertoire.
Le fichier (si elle fait référence à un paquet) doit vivre à l'intérieur du répertoire stucture il est fait référence. Si je compile Saluton.java dans /terri avec le paquet claire.andrea, je n'ai pas trouvé une façon de l'exécuter, il ne compile bien.
Aussi, le nom de la classe doit correspondre à la classe publique dans ce fichier.
À exécuter, package.Class. En général, les paquets ne sont pas capitalisés et les Classes.
OriginalL'auteur Jerry Ludwig