2012-12-01 3 views
5

저는 Java를 처음 접했고 웹에서 해결책을 찾았지만 아무 것도 작동하지 않습니다. 도와주세요.사용자 정의 Java 클래스 가져 오기

두 개의 파일이 있습니다. 그 중 하나는 main 함수가 들어있는 java 파일입니다. 이 글은이 명령에와

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

, 나는 VaporVisitor.java라는 별도의 파일에 클래스의 새로운 객체 VaporVisitor를 만들려고합니다. 그러나 Java는 VaporVisitor가 무엇인지 인식하지 못합니다. VaporVisitor.java이 존재한다는 것을 모르기 때문입니다 (같은 디렉토리에 있음). 나는 그들을 다른 패키지와 같은 패키지의 일부로 만들려고 시도했다. 그리고 그들 모두는 실패했다. 아무도 나에게 어떤 지침을 줄 수 있습니까?

감사합니다.

편집 : 여기 정확히 내가하고있는 오류 메시지가 표시됩니다. 그래서 3 개의 파일이 있습니다. V2VM (내 주요 기능 포함), VaporVisitor 및 여러 사용자 정의 클래스가있는 제공된 jar 파일. jar 파일로 인해 문제가 발생하지 않습니다. java가 VaporVisitor를 인식하게하려고합니다.

그래서 V2VM (주 기능)에서 퍼팅을 시도했습니다 : import V2VM.java;이 작동하지 않았습니다. V2VM을 vv라는 하위 폴더에 넣고 VaporVisitor에 package vv;을 추가하고 V2VM.java에 넣으려고했지만 import vv.*하지만 그 중 하나도 작동하지 않았습니다.

컴파일을 위해, 나는 그것이 나에게주는 javac -classpath [the jar file].jar V2VM.java

오류를 시도 :

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

내가 javacc를 실행하면 나는 다른 두 개의 파일이있는 위치도 V2VM, 같은 디렉토리에서 오전 . 나는 V2VM과 VaporVisitor를 같은 패키지에 넣으려고했으나 그 중 하나는 작동하지 않았다. 그래서 그들은 ...

편집이 지금 어떤 패키지의 일부가 아닌 : VaporVisitor 및 V2VM

V2VM.java의 소스 코드 : VaporVisitor.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){ 
    ... 
} 

:

package vv; 

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

3 개의 파일 모두 같은 디렉터리에 있습니다. vv

+1

어떻게 컴파일하나요? (IDE는 일반적으로이 모든 것을 사용자를 위해 정렬합니다.) –

+2

어떻게 이러한 클래스를 컴파일합니까? 파일이있는 디렉토리, 현재 디렉토리 및 파일을 컴파일하는 데 사용 된 명령을 표시하십시오. 정확한 오류 메시지를 붙여 넣으십시오. 클래스가 어떤 패키지인지 알려주십시오. –

+0

실제로 터미널을 사용하고 있고'javac' 만 실행하고 있습니다. 가능한 경우 IDE에 의존하는 대신 내가해야 할 일을 이해할 수 있다면 좋을 것입니다. – pauliwago

답변

9

확인. 그래서 우선, 당신은 그 이름에 .java을 덧붙임으로써 Java의 클래스를 결코 참조하지 않습니다. 둘째 : 다른 클래스 B를 사용하는 클래스 A를 컴파일하려면 클래스 B를 컴파일해야하고 클래스 경로에서 사용할 수 있어야합니다. 또는 A와 B를 동시에 컴파일해야합니다.

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

두 클래스로 시작한다 :

그래서, 당신은 다음과 같은 구조를 가지고 있어야

그들이에 있기 때문에 VaporVisitor 또는 그 반대의 V2VM을 가져올 필요가 없습니다
package vv; 

같은 패키지.

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

이 한 번에 두 개의 파일을 컴파일 및 프로젝트/클래스에서 자신의 컴파일 된 클래스 파일을 넣어 것입니다 :

는 프로젝트 디렉토리에 있어야 파일을 컴파일하고 다음 명령을 사용합니다 :

project 
    classes 
     vv 
     V2VM.class 
     VaporVisitor.class 

컴파일 한 클래스가이 jar 파일의 클래스를 사용하기 때문에 jar 파일을 클래스 경로에 넣습니다.

그런 다음 클래스를 실행하려면 클래스 경로에 jar 파일과 classes 디렉토리가 있어야합니다. 그리고 메인 클래스의 완전히 quelidied 이름은 vv.V2VM입니다. 그래서 명령을 사용하면 창에 있다면, 당신은 \ 대신 /; 대신 :을 사용해야합니다

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

입니다.

먼저 VaporVisiotr을 컴파일하고 V2VM을 컴파일하려면 다음을 수행하십시오. 이 내용은 VaporVisiotr를 컴파일

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

project/classes에서의 클래스 파일을 넣어 : 그런데 당신은 다음을 수행해야합니다. 그런 다음 VaporVisitor에 의존하는 V2VM을 컴파일해야합니다. 컴파일 된 VaporVisitor 클래스는 클래스 패스에서 사용할 수 있어야합니다.

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

VaporVisitor.java로 시작해야합니다 : 다른 패키지 (예를 들어 vv.foo), 당신은 다음과 같은 구조를 필요에 VaporVisitor을 넣어하기로 결정하는 경우 그래서 명령은

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

입니다

package vv.foo; 

그리고 V2VM.java 파일이 필요가

package vv; 
import vv.foo.VaporVisitor; 

tutorial about packages을 읽으십시오.

+0

awesome explanation! –

관련 문제