2017-07-11 7 views
-1

Dies ist das dümmste, einfachste Problem aller Zeiten mit Java, aber was mache ich falsch?Java-Kompilierung/Paket/Namespace-Fehler

In einer Verzeichnisstruktur genannt

com/myname/robos 
    - Robo.java 
    - Arena.java 

Robo.java:

package com.myname.robos; 

public class Robo { 
    public void fala() { 
    System.out.println("Gleep Beep Boop!");  
    } 
} 

Arena.java:

package com.myname.robos; 

import com.myname.robos.Robo; 

public class Arena { 

    public static void main(String[] args) { 
     Robo r2 = new Robo(); 
     r2.fala(); 
    } 
} 

Wenn ich versuche zu:

javac Robo.java 

es kompiliert.

Wenn ich versuche dann zu

javac Arena.java 

ich

Arena.java:3: error: cannot find symbol 
import com.myname.robos.Robo; 
          ^
    symbol: class Robo 
    location: package com.myname.robos 
Arena.java:8: error: cannot find symbol 
     Robo r2 = new Robo(); 
     ^
    symbol: class Robo 
    location: class Arena 
Arena.java:8: error: cannot find symbol 
     Robo r2 = new Robo(); 
        ^
    symbol: class Robo 
    location: class Arena 
3 errors 

Ich weiß, es ist ein Fehler über Inkompatibilität zwischen Verzeichnis/Paket usw. Namen.

Aber ich bekomme immer noch nicht richtig. Was sollte Ich schreibe?

+2

'javac com/myname/robos/Robo.java',' javac com/myname/robos/Arena.java', und lesen Sie auf den 'classpath' und' sourcepath' Optionen zu ' javac'. –

+0

Ich muss den Compiler von außerhalb des Pfades ausführen? – interstar

+0

Sie müssen es so ausführen, dass der Pfad _preserve_ ist. Lesen Sie das Feinhandbuch. Es ist dokumentiert, wie man 'javac' benutzt. Lesen Sie das Feinhandbuch. –

Antwort

0

Sie müssen sicherstellen, dass Ihre Dateien in der gleichen Struktur wie Ihr Paket Referenz, sagt:

wenn Ihre .java-Dateien zum Beispiel bei ../Desktop sind Sie Ordner mit Namen erstellen müssen: com, myname und Robos und dann fügen Sie sie dort, so dass Ihre Dateien werden ../Desktop/com/myname/robos.

Dann brauchen Sie nur Arena.java kompilieren und ausführen:

$ javac com/myname/robos/Arena.java

$ java com/myname/robos/Arena

Positionierung Sie innerhalb ../Desktop

+0

Nicht sicher, was Sie für Pfade angeben, aber es ist am besten, nicht 'javac' aus der Tiefe der Pakethierarchie, wie Sie vielleicht zu zeigen scheinen. Sie möchten vom Wurzelverzeichnis der Pakethierarchie aus kompilieren oder die Optionen 'classpath' und/oder' sourcepath' verwenden, um es gerade zu setzen. Diese Antwort ist nicht korrekt. –

+0

Ok, du hast Recht, bearbeitet. Sie können vom Stamm der Pakethierarchie aus kompilieren, in diesem Fall ist es jedoch erforderlich, in javac command die Hierarchie selbst einzurichten. – DKnight00

+0

'Java' erfordert einen vollständig qualifizierten Klassennamen als Argument, nicht als Dateisystempfad. Was geben Sie am Anfang dieser Befehle mit '../ Desktop' an? Das sollte nicht Teil des Befehls sein. Führen Sie Ihre Beispiele aus, bevor Sie sie veröffentlichen? –