2012-12-01 14 views
5

Ich bin neu in Java und ich habe im Internet nach Lösungen gesucht, aber keine scheint zu funktionieren. Bitte hilf mir.Import benutzerdefinierte Java-Klasse

Ich habe zwei Dateien. Eine davon ist die Java-Datei, die die Hauptfunktion enthält. Darin:

... 
VaporVisitor visitor = new VaporVisitor(); 
... 

Mit diesem Befehl mag ich VaporVisitor, um ein neues Objekt zu schaffen, die eine Klasse in einer separaten Datei VaporVisitor.java genannt wird. Java erkennt jedoch nicht, was VaporVisitor ist, vermutlich weil es nicht bekannt ist VaporVisitor.java existiert (es ist im selben Verzeichnis). Ich habe versucht, sie Teil des gleichen Pakets zu machen, in verschiedenen Paketen und zu importieren ... und alle sind fehlgeschlagen. Kann mir jemand eine Anleitung geben?

Danke!

EDIT: Hier ist genau das, was ich tue, und die Fehlermeldung, die ich bekomme: Also habe ich 3 Dateien. V2VM (mit meiner Hauptfunktion), VaporVisitor und eine mitgelieferte JAR-Datei mit mehreren benutzerdefinierten Klassen. Die JAR-Datei gibt mir keine Probleme; es versucht, Java zu bekommen, um VaporVisitor zu erkennen.

Also in V2VM (die Hauptfunktion), habe ich versucht zu setzen: import V2VM.java; die nicht funktioniert hat. Ich habe versucht, V2VM in einen Unterordner namens VV, fügte package vv; zu VaporVisitor und legte V2VM.java import vv.*, aber das hat auch nicht funktioniert.

Für die Erstellung, habe ich versucht, javac -classpath [the jar file].jar V2VM.java

Die Fehler es gibt mir:

V2VM.java:15: cannot find symbol 
symbol : class VaporVisitor 
location: class V2VM 
VaporVisitor visitor = new VaporVisitor(); 
^ 
V2VM.java:15: cannot find symbol 
symbol : class VaporVisitor 
location: class V2VM 
VaporVisitor visitor = new VaporVisitor(); 
         ^

Als ich javacc betreibe ich bin im selben Verzeichnis wie V2VM, wo auch die beiden anderen Dateien befinden . Ich habe versucht, V2VM und VaporVisitor in das gleiche Paket zu packen, aber das hat auch nicht funktioniert. So sind sie nicht Teil eines Pakets jetzt ...

EDIT 2: SOURCE CODE OF VaporVisitor und V2VM

V2VM.java:

package vv; //whether I put this or not, it doesn't work 

//this stuff was provided, and is related to importing contents of the jar file; don't think this is the problem 
import cs132.util.ProblemException; 
import cs132.vapor.parser.VaporParser; 
import cs132.vapor.ast.VaporProgram; 
import cs132.vapor.ast.VBuiltIn.Op; 

import java.io.InputStreamReader; 
import java.io.IOException; 
import java.io.PrintStream; 

import vv.VaporVisitor; //whether I put this or not, it doesn't work 

public class V2VM{ 

public static void main(String [] args){ 

VaporProgram vp = parseVapor(System.in, System.err); 
VaporVisitor visitor = new VaporVisitor(); 

for(int i=0; i<vp.functions.length; i++){ 
for(int j=0; j<vp.functions[i].body.length; j++){ 
    vp.functions[i].body[j].accept(parameter, visitor); 
    } 
} 
} 

public static VaporProgram parseVapor(InputStream in, PrintStream err){ 
    ... 
} 

Für VaporVisitor.java:

package vv; 

public class VaporVisitor extends VInstr.VisitorPR<Parameter_Type, Return_Type, RuntimeException>{ 
    .... 
} 

Alle 3 Dateien befinden sich im selben Verzeichnis vv

+1

Wie kompilieren Sie? (Eine IDE würde das normalerweise zum Beispiel für Sie aussortieren.) –

+2

Wie kompilieren Sie diese Klassen. Zeigen Sie uns die Verzeichnisse, in denen die Dateien abgelegt sind, das Verzeichnis, in dem Sie sich befinden, und den Befehl zum Kompilieren der Dateien. Fügen Sie die genaue Fehlermeldung ein, die Sie haben. Sagen Sie uns, in welchem ​​Paket die Klassen sind. –

+0

Ich benutze das Terminal und laufe 'javac'. Es wäre großartig, wenn ich verstehen könnte, was ich tun sollte, anstatt mich auf die IDE zu verlassen, wenn möglich. – pauliwago

Antwort

9

OK. Zuallererst beziehen Sie sich niemals auf eine Klasse in Java, indem Sie .java an ihren Namen anhängen. Zweitens: Um eine Klasse A zu kompilieren, die eine andere Klasse B verwendet, muss die Klasse B kompiliert und im Klassenpfad verfügbar sein. Oder Sie müssen gleichzeitig A und B kompilieren.

Also, sollten Sie die folgende Struktur haben:

project 
    lib 
     someFile.jar 
    src 
     vv 
     V2VM.java 
     VaporVisitor.java 
    classes 

Beide Klassen mit beginnen sollte:

package vv; 

gibt es keine Notwendigkeit V2VM in VaporVisitor oder umgekehrt zu importieren, da sie in der sind gleiches Paket.

die Dateien kompilieren, Sie im Projektverzeichnis sein sollte, und verwenden Sie den folgenden Befehl ein:

javac -cp lib/someFile.jar -d classes src/vv/V2VM.java src/vv/VaporVisiotr.java 

Damit werden die beiden Dateien auf einmal kompilieren, und ihre kompilierten Klassendateien in Projekt/Klassen setzen:

Sie fügen die JAR-Datei in den Klassenpfad ein, da die Klassen, die Sie kompilieren, Klassen aus dieser JAR-Datei verwenden.

Um die Klasse auszuführen, müssen Sie sowohl die JAR-Datei als auch das Klassenverzeichnis im Klassenpfad haben. Und der vollqualifizierte Name der Hauptklasse ist vv.V2VM. So lautet der Befehl

java -cp lib/someFile.jar:classes vv.V2VM 

Wenn Sie auf Fenster sind, können Sie \ statt / und ; statt : verwenden.

Wenn Sie VaporVisiotr zuerst und dann V2VM kompilieren möchten, könnten Sie. Aber dann würden Sie folgendes tun:

javac -cp lib/someFile.jar -d classes src/vv/VaporVisitor.java 

Diese VaporVisiotr nur kompiliert, und legte seine Klassendatei in project/classes. Dann müssen Sie V2VM kompilieren, was von VaporVisitor abhängt. Daher muss die kompilierte VaporVisitor-Klasse im Klassenpfad verfügbar sein. So lautet der Befehl

javac -cp lib/someFile.jar:classes -d classes src/vv/V2VM.java 

Wenn Sie VaporVisitor in einem anderen Paket (vv.foo zum Beispiel) setzen beschlossen, dann würden Sie die folgende Struktur benötigen:

project 
    lib 
     someFile.jar 
    src 
     vv 
     V2VM.java 
     foo 
      VaporVisitor.java 
    classes 

Die VaporVisitor.java müssten beginnen mit

package vv.foo; 

Und die V2VM.java Datei müssten haben

package vv; 
import vv.foo.VaporVisitor; 

Lesen Sie die tutorial about packages.

+0

genial Erklärung! –

Verwandte Themen