Wie starte ich eine Java-Klasse in ein Paket?
Ich habe zwei java-Klassen wie folgt
App1
ohne Paket:
class App1 {
public static void main(String[] args) {
System.out.println("App1 hello world...");
}
}
App2
in einem Paket:
package java.java.package1;
class App2 {
public static void main(String[] args) {
System.out.println("App2 hello world...");
}
}
Kann ich kompilieren Sie beide:
D:\javaTest>javac App1.java
D:\javaTest>javac App2.java
Jedoch kann ich nur das erste:
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.
Wie kann ich App2
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du die Quelle in einem entsprechenden Verzeichnis-Hierarchie passend zu den Paket-Namen (
D:\javaTest\java\java\package1\App1.java
), und kompilieren/starten von der Wurzel der Hierarchie (D:\javaTest
), die Sie nicht haben, dieses problem:Können Sie auch kompilieren mit der
-d
option, so dass die Klassen verschoben werden, in einen solchen Verzeichnis-Hierarchie:Hinweis: Sie sollten nicht verwenden Sie einen package-Namen beginnen mit
java
, und späteren Versionen des JDK werfen eine SecurityException. Sehen diese Frage für weitere Informationen./
statt.
. Wenn Sie das Programm ausführen, es ist Umgekehrt: verwenden Sie.
statt/
.Setzen Sie
-d directory
Optionen..daApp2 muss in der java - /java - /package1-Verzeichnis. In java-das Paket den Namen und das Verzeichnis für die source-code müssen übereinstimmen. Hast du dich nicht zu einem Kompilierungsfehler?
Erstellen Sie ein neues Verzeichnis. Dies ist das Verzeichnis mit Ihrer Arbeit, und nicht den Anfang Ihrer Pakete.
Habe ich zum Beispiel Ordner erstellen /terri zu starten.
Ich dann erstellen sich die Ordner Struktur /clarie/andrea unter ihm.
Mein Paket genannt wird claire.andrea, in diesem Beispiel.
Normal Paketnamen beginnen mit com und dann eine Firma oder etwas ähnliches (oder java für standard-java-Pakete, also nicht verwenden: wie bei java.lang.*).
In der andrea Ordner, erstelle ich eine java-Datei aufgerufen Saluton.java mit der Klasse Saluton (die nur drucken Hallo). Der name der Klasse und Dateiname müssen übereinstimmen.
Kompilieren, aus dem terri/Ordner: javac .\claire\andrea\Saluton.java
Dadurch wird eine Saluton.class in der \terri\claire\andrea\Saluton.class
Laufen: (wieder aus /terri), mache ich Folgendes: java -cp . claire.andrea.Saluton
Die besagt, Klasse Weg von meinem aktuellen Verzeichnis.
Mein main Programm ist in dem Paket claire.andrea und der name der Klasse ist Saluton.
Hier der Lauf:
\terri
java -cp . claire.andrea.Saluton
"Hallo Welt".
Um es zusammenzufassen, die package-Namen müssen übereinstimmen die zugrunde liegende Verzeichnisstruktur.
Die Datei (wenn Sie auf ein Paket) Leben müssen innerhalb der Verzeichnisstruktur und es bezieht sich. Wenn ich kompilieren Saluton.java in /terri mit Paket claire.andrea ich habe nicht gefunden, einen Weg, um es auszuführen, macht es kompilieren in Ordnung.
Auch, die mit dem Namen der Klasse übereinstimmen muss, die öffentliche Klasse in der Datei.
Laufen, package.Class. Im Allgemeinen, Pakete werden nicht aktiviert und Klassen sind.