2012-06-14 2 views
9

있다 결과는 다음과 같습니다.다음과 같이 내가 두 개의 자바 클래스가 패키지 이름

D:\javaTest>javac App1.java 

D:\javaTest>javac App2.java 

D:\javaTest>java App1 
App1 hello world... 

D:\javaTest>java java.java.package1.App2 

Exception in thread "main" java.lang.NoClassDefFoundError: java/java/package1/Ap 
p2 
Caused by: java.lang.ClassNotFoundException: java.java.package1.App2 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: java.java.package1.App2. Program will exit. 

실행 방법 App2 클래스?

답변

18

클래스가 적절한 디렉토리 계층에 끝낼 수 있도록 당신은 -d 옵션을 사용하여 컴파일해야합니다

javac -d . App2.java 
java java.java.package1.App2 

또한, 당신은 처음부터 java로 시작하는 패키지 이름을 사용해서는 안됩니다.

소스을 적절한 디렉토리 계층에 넣고 계층 루트에서 컴파일/실행하면이 문제가 발생하지 않습니다.

+1

Chuck Norris가 말한 것 외에 : 디렉토리 계층 구조의 루트에 있고 컴파일 할 때'.' 대신'/'를 사용해야합니다. 프로그램을 실행할 때 역순으로 :'/'대신'.'을 사용하십시오. –

0

App2는 java/java/package1 디렉토리에 있어야합니다. java에서는 패키지 이름과 소스 코드의 디렉토리가 일치해야합니다. 컴파일 오류가 발생하지 않았습니까?

1

당신은 클래스 파일에 대한 대상 디렉토리를 설정

Options..because -d directory을 넣어해야합니다. 클래스가 패키지의 일부인 경우 javac은 패키지 파일을 반영하는 하위 디렉토리에 클래스 파일을 넣습니다. 필요에 따라 디렉토리를 만듭니다. 예를 들어, -d c : \ myclasses 을 지정하고 클래스의 이름이 com.mypackage.MyClass 인 경우 클래스 파일은 c : \ myclasses \ com \ mypackage \ MyClass.class입니다.

0

새 디렉토리를 만듭니다. 이 디렉토리는 작업이 들어있는 디렉토리이며 패키지의 시작이 아닙니다.

예를 들어, 시작할 폴더/테리를 만듭니다.

그런 다음 폴더 구조/clarie/andrea를 만듭니다. 이 예제에서 내 패키지는 claire.andrea라고합니다. 일반 패키지 이름은 com으로 시작한 다음 회사 이름 또는 그와 비슷한 것으로 시작합니다 (또는 표준 java 패키지의 경우 java이므로 java.lang. *과 같이 사용하지 마십시오).

andrea 폴더에서 Saluton 클래스 (그냥 hello를 출력 함)를 사용하여 Saluton.java라는 자바 파일을 만듭니다. 클래스 이름과 파일 이름이 일치해야합니다.

이 테리/폴더에서 컴파일하려면 다음. javac의를 \ 클레어 \ 안드레아 \ Saluton.java 이있는 Saluton.class을 만들 것입니다 \ 테리 \ 클레어 \ 안드레아 \ Saluton.class

실행하려면 : (다시/terri에서), 나는 다음과 같이한다 : java -cp. claire.andrea.Saluton 현재 경로의 클래스 경로를 사용합니다.
주 프로그램은 claire.andrea 패키지에 있으며 클래스 이름은 Saluton입니다.

실행 : \ terri java -cp. claire.andrea.Saluton

"Hello World"

요약하면 패키지 이름은 기본 디렉토리 구조와 많이 일치합니다. 파일 (패키지를 참조하는 경우)은 참조하는 디렉토리 구조 내에 있어야합니다./terri에서 패키지 claire.andrea로 Saluton.java를 컴파일하면 실행 방법을 찾지 못해 제대로 컴파일됩니다.

또한 클래스의 파일 이름은 해당 파일의 public 클래스와 일치해야합니다.

실행하려면 package.Class를 실행하십시오. 일반적으로 패키지는 대문자로 표기하지 않으며 클래스는 있습니다.

관련 문제