2017-07-11 1 views
-1

C'est le plus stupide, le plus simple problème jamais avec Java de base, mais qu'est-ce que je fais mal?Java compilation/paquet/erreur d'espace de noms

Dans une structure de répertoire appelé

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(); 
    } 
} 

Lorsque je tente de:

javac Robo.java 

il compile.

Lorsque je tente alors

javac Arena.java 

Je reçois

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 

Je sais que c'est une erreur de l'incompatibilité entre le répertoire/paquet etc. noms.

Mais je n'ai toujours pas compris. Que devrait Je écris?

+2

'javac com/mon nom/robos/Robo.java',' javac com/monname/robos/Arena.java', et lisez les options 'classpath' et' sourcepath' à ' javac'. –

+0

Je dois lancer le compilateur depuis l'extérieur du chemin? – interstar

+0

Vous devez l'exécuter de manière à conserver le chemin. Lisez le Fine Manual. Il est documenté comment utiliser 'javac'. Lisez le Fine Manual. –

Répondre

0

Vous devez vous assurer que vos fichiers se trouvent dans la même structure que votre référence de paquet, dire:

si vos fichiers .java sont par exemple à ../Desktop vous devez créer des dossiers avec des noms: com, monnom et robos, puis collez-les là, donc vos fichiers seront à l'intérieur ../Desktop/com/myname/robos.

Ensuite, il vous suffit de compiler et exécuter Arena.java:

javac $ com/myname/robos/Arena.java

$ java com/myname/robos/Arena

Positionnement vous à l'intérieur ../Desktop

+0

Vous ne savez pas exactement ce que vous indiquez en termes de chemins, mais il est préférable de ne pas "javac" depuis la hiérarchie du paquet, comme vous semblez l'indiquer. Vous voulez compiler à partir de la racine de la hiérarchie du paquet ou utiliser les options 'classpath' et/ou' sourcepath' pour le régler directement. Cette réponse n'est pas correcte. –

+0

Ok, vous avez raison, édité. Vous pouvez compiler à partir de la racine de la hiérarchie du paquet, cependant, dans ce cas, il est nécessaire d'établir dans la commande javac la hiérarchie elle-même. – DKnight00

+0

'java' requiert un nom de classe complet en tant qu'argument, pas un chemin de système de fichiers. Qu'est-ce que vous indiquez avec '../ Desktop' au début de ces commandes? Cela ne devrait pas faire partie de la commande. Exécutez-vous vos exemples avant de les poster? –