2013-03-08 19 views
6

Sto tentando di concedere un accesso .java alla classe in un altro file .java. Mi piacerebbe farlo sulla riga di comando. Ad esempio, come farei usando i due file qui sotto?Due file java, nella stessa directory, uno che accede alle altre classi/s?

File: "ToImport.java"

package ABC; 
public class ToImport { 
    private String aName; 
    public ToImport(String Name) { 
     aName = Name; 
    } 
    public String toString() { 
     return("Text: " + aName); 
    } 
} 

File: "TheImport.java"

package ABC; 
public class TheImport { 
     public static void main(String[] args) { 
     ToImport abc = new ToImport("a"); 
     System.out.println("TEST: " + abc); 
    } 
} 

Quando digito javac ToImport.java ottengo nessun errore, ma quando digito javac TheImport.java ottengo il seguente errore ,

Command Prompt Error Message

+0

in quale directory le classi sono collocati e come e da dove si esegue java –

+3

Molto probabilmente si sta chiamando 'javac' dalla directory in cui questi due i file si trovano. Entrambi devono essere in una directory chiamata "ABC" (il nome del pacchetto), e dovrai chiamare 'javac ABC \ TheImport.java' dalla directory che contiene" ABC ". Questa è la mia ipotesi, comunque. – iamnotmaynard

+0

poiché entrambi i file sono nello stesso pacchetto e dichiarati pubblici, quindi non è necessario preoccuparsi di chiamare, è sufficiente creare semplicemente l'oggetto, ma la domanda è, come ha detto Jigar, come lo si compila –

risposta

6

TheImport dipende dalla classe ToImport. Quindi, quando compili il TheImport, il compilatore deve anche compilare ToImport o avere accesso alla classe ToImport già compilata.

Diciamo che avere una directory che sia simile alla seguente,

src 
└── ABC 
    ├── TheImport.java 
    └── ToImport.java 

Inoltre diciamo che sei nella directory src e vuole compilare a ../classes. È necessario utilizzare uno dei seguenti comandi:

javac -d ../classes ABC/ToImport.java ABC/TheImport.java 

o

javac -d ../classes ABC/ToImport.java 
javac -cp ../classes -d ../classes ABC/TheImport.java 

Se entrambi i file .java dipendevano gli uni sugli altri, allora si avrebbe dovuto compilarli entrambi contemporaneamente, come nel primo comando.

Si noti inoltre che i pacchetti devono essere tutti in minuscolo per rispettare le convenzioni di denominazione Java.

Per eseguire il programma principale è possibile digitare,

cd ../classes 
java ABC.TheImport 
+0

Buona spiegazione –

+0

Risposta perfetta. Potresti aggiungere giare esterni mentre compili nel '-cp' stesso e dovrebbero': 'separati. Dovrai anche passare i giare mentre esegui il file di classe usando il comando 'java'. – backslashN

3

dal coro età contenente i file .java funzionare:

javac *.java 

o

javac TheImport.java ToImport.java 

Il compilatore ha bisogno di compilare entrambe le classi, allo stesso tempo, non si può compilare individualmente una singola classe con dipendenze su un altro.

+0

Il compilatore non lo fa Devo compilare entrambe le classi contemporaneamente. Può compilare uno e quindi compilare l'altro che dipende da esso usando il parametro 'javac'' -cp', come nella risposta a questa domanda di JB Nizet. – Max