2011-02-07 7 views
1

나는 다음과 같은 코드를 작성했습니다 작동하지 :. 내가 컴파일 명령에 따라 사용 후수입 패키지 이름 *

package abc.def; 

public class test { 

public void test() {} 
public void disp() { 
System.out.println("in disp"); 
} 

} 

을 :

javac -d . test.java 

가 잘 작동하지만 나는 클래스를 가져하려고 할 때 사용 "테스트" ". 수입 abc.def을 *"이 테스트 클래스를 가져 오지 않습니다, 코드는 다음과 같습니다

import abc.def.*; 


public class checktest { 

public static void main(String a[]) { 

test t = new test(); 

} 

} 

다음과 같은 오류가 생성됩니다 :

D:\javaprograms>javac checktest.java 
checktest.java:8: cannot access test 
bad class file: .\test.java 
file does not contain class test 
Please remove or make sure it appears in the correct subdirectory of the classpa 
th. 
test t = new test(); 
^ 
1 error 
+0

javac을 클래스 파일 (test.class, 생성 된 곳)으로 지정해야합니다. – justkt

+0

이 경우에 javac의 정확한 구문을 제공 할 수 있습니까 – imran

답변

1

올바른 디렉토리 구조를 만들었습니까? 원하는 패키지 이름이라면 abc/def에 test.java 파일이 있어야합니다.

또한 -cp 플래그를 사용하여 컴파일 된 Test.class라는 파일을 가리킬 수 있습니다

예 :

javac의 checktest

+0

디렉토리 abc/def에 이미 test.class가 포함되어 있으며 test.java도 같은 폴더에 복사했지만 문제는 해결되지 않았습니다. – imran

-1

처음이 알고 -cp 테스트 - 사용하려면 다른 프로그램의 패키지에서 평소대로 .java 파일을 컴파일 한 다음 결과 .class 파일을 CLASSPATH 환경 변수에서 참조되는 디렉토리 중 하나의 해당 하위 디렉토리로 이동하십시오.

예를 들어/home/name/classes가 CLASSPATH에 있고 패키지 이름이 package1이면/home/name/classes에 package1이라는 디렉토리를 만든 다음 모든 .class 파일을 패키지에 넣습니다/home/name/classes/package1에 있습니다.

이제 클래스 패스는 가정/이름/클래스 다음 지금 폴더

+0

내가 "import abc.def.test"라고 쓰면 잘 동작하지만 "import abc.def. *"는 문제를 만듭니다. – imran

1

디렉토리 내에서이 코드

import abc.def.*; 

public class checktest { 

public static void main(String a[]) { 

test t = new test(); 

} 

} 

을 넣어 $ javac -d /home/name/classes test.java

를 사용

package abc.def; 

public class test { 

public void test() {} public void disp() { System.out.println("in disp"); } 

} 

컴파일/가정하자 구조는 다음과 같아야합니다 :

  • 현재 작업 디렉토리
    • checktest.java
    • ABC
      • 데프
        • 테스트.

          javac checktest.java 
          

          이 자동으로 찾을 수 있습니다 (컴파일) 너무 test.java : 다음

자바은 상단에있는 디렉토리에서, 당신은 checktest은 컴파일 할 수 있습니다. 테스트 만 컴파일하려면 다음과 같이하십시오.

javac abc/def/test.java 

그러면 모든 클래스 파일도 올바른 디렉토리에있게됩니다.

+0

디렉토리 구조가 지정된대로 정확합니다. 나는 "test.java"가 d : \ javaprograms \ abc \ def \ test.java에 있고 "checktest.java"가 "d : \ javaprograms"에 있기 때문에 classpath 변수가 올바르게 설정되지 않았다고 생각합니다. 정확한 경로 여야합니다. "및"d : \ javaprograms "은 현재 디렉토리입니다. – imran

+0

"abc.def.test 가져 오기 "가 올바르게 작동하지만"abc.def. * "가져 오기가 작동하지 않습니다. – imran

+0

CLASSPATH 변수를 설정하면 안됩니다. 그것이 무시되는지 확인하려면,'javac -cp. checktest.java'. –

1

나는 또한 동일한 문제가있었습니다.

추가로 설정할 클래스 경로가 필요하지 않습니다.

시나리오에 따라 작업 디렉토리에 test.java 파일이 들어있을 수 있습니다. test.java 파일을 작업 디렉토리에서 제거하고 javac checktest.java를 사용하여 컴파일하면됩니다.

작동합니다.

감사합니다. Britto

0

실수로 컴파일 한 test.java가 최상위 디렉토리에있는 것으로 보이므로 JVM이 최상위 디렉토리에서 test.class를 선택하고 abc \ def \ test.class에서도 충돌이 발생합니다. .

최상위 디렉토리에 ls test *를 입력하고 그런 경우에 대비하여이 추가 test.class를 삭제 한 다음 다시 컴파일하십시오.