2013-10-17 9 views
19

Ich habe die zuvor geposteten Fragen gelesen. Einige sind vage und niemand hat mein Problem gelöst, so dass ich gezwungen bin, erneut zu fragen.Ausführen von Java im Paket von der Befehlszeile

Ich habe zwei einfache Klassen,

package One; 
import One.Inner.MyFrame; 
public class test 
{ 
    public static void main(String args[]) 
    { 
     MyFrame f= new MyFrame(); 
    } 
} 

Und die andere Klasse,

package One.Inner; 
import java.awt.*; 
import javax.swing.*; 

public class MyFrame extends JFrame 
{ 
    public MyFrame() 
    { 
     setPreferredSize(new Dimension(400,560)); 
     setVisible(true); 
    } 
} 

ich auf Basisordner "basic" bin in Windows cmd. Ich kompiliere mit

basic> javac *.java -d . 

Ein Ordner und Unterordner wird erstellt.

cd One 
basic\One> java test 

Dies erzeugt eine große Anzahl von Fehlern. Viele Antworten zielen darauf ab, den vollständigen Pfad anzugeben, der nicht funktioniert hat. Meine Klassen sind in One, also die Angabe One mit -cp funktioniert auch nicht.

Antwort

35

Sie würden führen Sie es als:

java One.Test 

... aber aus dem Wurzel Verzeichnis (basic), nicht aus dem One Verzeichnis. Sie geben immer den vollständigen Klassennamen an.

Oh, und Paketnamen in Java sollten unter Fall sein, so sollte es one und one.inner, nicht One und One.Inner. Nur eine Konvention, der aber fast jeder folgt.

+0

Das Verzeichnis, aus dem es gemacht werden muss, war wirklich wichtig. Ich habe das früher falsch.TY .... gemerkt. Ich hatte den falschen Eindruck, dass nur Javas eingebaute Pakete klein sein müssten. – user2756339

+0

Gibt es eine Möglichkeit, es aus demselben Verzeichnis auszuführen? Zum Beispiel ein Arbeitsverzeichnis über eine Befehlszeilenoption angeben? Ich suche viel nach diesem und jeder sagt "geh nur einen Dir hoch", aber es ist wirklich nervig in einigen Szenarien. –

+0

Oh, hier ist es: 'java -cp ../ one.Test'. Ich war mir sicher, dass ich es schon einmal versucht habe. –

11

Wenn das Verzeichnis ist:

basic\One 

Run Java aus dem Basisverzeichnis des Pakets:

basic>java One.test or basic>One.test <optional arguments> 

(idealerweise das Paket klein geschrieben werden würde und die Klasse Großbuchstaben):

basic>java one.Test 

Wenn Sie Nachrichten "nicht vorhanden" erhalten, kann der Java-Befehl die von Ihnen referenzierten Klassen nicht finden in deiner Klasse. Sie können mit der Option -cp darauf verweisen ('.' Bedeutet 'hier', und Sie können so viele Orte hinzufügen, wie Sie möchten, geteilt durch ';' unter Windows und ':' unter Linux).

basic>java -cp . one.Test 
or 
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory one.Test 
+0

Das Beispiel mit dem Flag -cp ist hilfreich. +1 – binarysubstrate

+0

Danke, es ist hilfreich. –

1

während eine Klasse mit einem Paket zu schaffen, wenn Sie es aus ausführen möchten cmd müssen Sie ein Verzeichnis mit dem gleichen Namen Paket erstellt die .class in sie und dann können Sie leicht zum Beispiel laufen Sie erstellt Klasse mit dem Namen „eins“ und dieser Klasse im Paket mit dem Namen Pack müssen Sie diese Befehlen

1 javac laufen one.java
nach der Kompilierung ein Verzeichnis mit dem Namen Pack erstellt, danach diesen Befehl ausführen
2 Java-Paket.ein
Hinweis:
all dies muss im aktuellen Arbeitsverzeichnis und den Namen "Eins" Ich habe es hier als Dateiname und Hauptklassenname Wir alle wissen, der Vorname im ersten Befehl verwendet wird, ist Dateiname und zweite ist Hauptklasse Name

+0

Sie sollten Formatierung verwenden, um das Verständnis Ihrer Antwort zu erleichtern. –

1

Dies liegt daran, wenn Sie Paket in Ihrer Java-Datei deklarieren, dann JAVA-Compiler glauben Sie denselben Ordner Architektur in Ihrem System haben. In Ihrem Fall Java-Compiler auf der Suche nach One als Paket und dann test.class., Oder um sehr spezifisch zu sein nur in Ihre .class-Datei schauen Sie können sehen, welchen Pfad es sucht. Bitte überprüfen Sie unten ein Bild zurück (ich meinen Fall verwende ich Hallo und Tester)

.class

Wie Sie sehen Pfad in Bild können ist Hallo/Tester (mein Fallbeispiel), so Architektur sollte wie Hello- sein > Tester.

Und wenn Sie nicht die gleiche Architektur haben und diese beim Kompilieren erstellen möchten, verwenden Sie den Befehl javacp.

Verwandte Themen