2011-01-11 5 views
1

아래이자바 클래스 패스 관련 질의

package food; 
public abstract class Fruit{ 
    public static void main(String[] args){ 
    int x=10; 
    System.out.println("x is "+x); 
    } 
} 

이 두 프로그램은 다음 디렉토리 경로에 저장됩니다 Fruit.java라는 다른 프로그램입니다

import food.Fruit; 
class Apple extends Fruit{ 
public static void main(String[] args){ 
    int y=20,z=0; 
    z=y+10; 
    System.out.println("x+y is "+z); 
} 
} 

Apple.java라고 내 프로그램 : - G : \ Java \ food 다음 명령을 사용하여 두 프로그램을 모두 성공적으로 컴파일했습니다. -

G:\>javac Java\food\*.java 

그리고 클래스 파일을 생성했습니다. 나는 다음과 같은 명령을 사용하여 과일 프로그램을 실행하기 위해 관리 않았다 - 나는 애플 프로그램에 동일한 작업을 수행하려고 할 때

G:\>java -classpath G:\Java food.Fruit 

그러나,이 오류 메시지의 결과.

G:\>java -classpath G:\Java food.Apple 
Exception in thread "main" java.lang.NoClassDefFoundError: food/Apple (wrong name: Apple) 

오류가 무엇인지 알아낼 수 있습니까? 나는 SCJP cert 시험 준비를 위해 노력하고 있으며 따라서이 예를 캐시 시에라 (Cathy Sierra)와 버트 베이츠 (Bert Bates)가 쓴 McGrawHill 출판 책으로 다시 언급한다.

감사합니다. 그 코드가 책에 얼마나 때문에


편집 # 2

그래, 내가 그랬어. 패키지 문을 포함하지 않아도 파일을 실행할 수있는 방법이 있습니까?

  1. 시도 두 파일을 컴파일 -이 :

    이 같은 질문은 모습입니다. Apple 클래스를 사용하려면 Fruit.class 파일을 food 하위 디렉토리에 두십시오.


편집 # 3

는 그 시도했고, 필요없이 다음과 같은 오류를

G:\>java -classpath G:\Java\food Apple 
Exception in thread "main" java.lang.NoClassDefFoundError: food/Fruit 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(Unknown Source) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$000(Unknown Source) 
    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) 
Caused by: java.lang.ClassNotFoundException: food.Fruit 
    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) 
    ... 12 more 
Could not find the main class: Apple. Program will exit. 

편집 # 4

내가 그것을 실행하기 위해 관리 않았다

있어 명세서에 포장 식품 포함; 내가 변경 무엇

G:\>java -classpath G:\Java\food;G:\Java Apple 
x+y is 30 

내가 폴더 "음식"패키지의 표시이기 때문에 Apple.class는 의미가 별도의 폴더로 파일을 이동 Darvis로이 필요한 폴더의 모든 파일을 지적했다 패키지 이름은 실행되지 않습니다.해당 식품 패키지를 지정하지 않았기 때문에


편집 # 5 이 너무

G:\>java -classpath G:\Java Apple 
x+y is 30 
+1

Apple 클래스에 'package food;'문이 있습니까? –

+1

@SB : 예외 메시지는 분명한 증거입니다. – BalusC

+1

@BalusC - 하 그래. –

답변

2

했다. 이처럼하고는

package food; 
import food.Fruit; 
class Apple extends Fruit{ 
public static void main(String[] args){ 
    int y=20,z=0; 
    z=y+10; 
    System.out.println("x+y is "+z); 
} 
} 

업데이트 작동합니다 : 상대적 클래스 사과를 검색합니다 거기에서 당신이

G:\>java -classpath G:\Java food.Apple 
Exception in thread "main" java.lang.NoClassDefFoundError: food/Apple (wrong name: Apple) 

아래 실행하면

이 클래스 경로에 G:\Java를 추가합니다 음식물에 DIR 패키지 이름이 지정됨 food

또는. 클래스에 패키지를 지정하지 않으려면

G:\>java -classpath G:\Java\food Apple