컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post 딜리셔스 팁] 태그(Tag) 분류, 카테고리(번들)로 묶기 - del.icio.us bun...[QnA] Pause / Break, Shift 키의 아스키코드(ASCII Code) 값은...자바/Java] 십진수를 이진수로 변환 - 10진수 / 2진수(Binary) 진법자바/Java] 10진수, 16진수로 변환 출력 - 십진수 십육진수(헥사;Hex)Perl/펄] 숫자 비교 예제, if문으로 - Compare Numbers펄/Perl] 문자열 비교, eq, ne / 정규식 비교 - Compare Strings ...자바/Java] 동적 배열 크기 확장 조절 / 숫자 문자열 혼합 배열 만들기 - Perli...자바/Java] 문자열 숫자 배열, 정렬(소팅;소트) 예제; SortEmEditor 이엠에디터] 줄번호, 행번호(줄 번호, 행 번호; Line Numbers)...HTML] 중국어 간체 표현, 유니코드(UTF-8) 웹페이지에, Chinese (Simpl...

자바/Java] Exception in thread 'main' java.lang.NoClassDefFoundError: Foo/class

Monday, September 25, 2006

Q: 자바를 컴파일한 후, 실행시키려면 Exception in thread "main" java.lang.NoClassDefFoundError: Foo/java 이런 에러가 납니다. 원인은 무엇입니까?

A: 대부분의 경우, 파일명을 잘못 입력했기 때문입니다.

예를 들어, Foo.java 라는 소스를 컴파일하여, Foo.class 라는 파일을 만든 후, Foo.class 를 실행시킬 때는,

java Foo

라고 해주어야 합니다.


D:\Z>java Foo.java
Exception in thread "main" java.lang.NoClassDefFoundError: Foo/java
에러! .java 라는 확장자를 붙였음 (이것은 소스 파일이니 당연히 에러가 남)

D:\Z>java Foo.class
Exception in thread "main" java.lang.NoClassDefFoundError: Foo/class
에러! .class 라는 확장자를 붙였음 (심지어 class 확장자도 안됩니다.)

D:\Z>java foo
Exception in thread "main" java.lang.NoClassDefFoundError: foo (wrong name: Foo)
에러! 자바는 항상 대소문자를 엄격히 구분합니다. 리눅스뿐 아니라 윈도우에서도 구분합니다.
따라서 Foo 를 foo 라고 적으면 안됩니다.

D:\Z>java wrir5uedrdu5eu5euer
Exception in thread "main" java.lang.NoClassDefFoundError: wrir5uedrdu5eu5euer
에러! 파일명 오타이거나, 아예 존재하지 않는 파일을 실행하려 했을 때


컴파일을 하지 않아서 Foo.class 라는 파일이 없을 때에도 그런 에러가 납니다.

자바는 컴파일 언어이기에 우선 컴파일을 해야 합니다.




따라서 소스 파일명이 Foo.java 라면, 도스창(명령 프롬프트)에서, 컴파일하고 나서
java Foo
이렇게 하면 에러 없이 잘 실행됩니다.




CLASSPATH 환경변수의 문제


이것은 좀 드문 경우입니다. CLASSPATH 환경변수를 잘못 지정하면, 현재 디렉토리에 .class 파일이 있어도 찾지를 못하게 되어 위의 에러가 발생합니다.

가령, 자신이 개발한 자바 클래스들을 넣어두는 폴더가
D:\myhome\java
라고 할 때, CLASSPATH 는

CLASSPATH=.;D:\myhome\java

이렇게 지정해야 합니다. 즉 앞에 점(.)이 있어야 합니다. 마침표(.)는 "현재 디렉토리"를 의미합니다.

그냥
CLASSPATH=D:\myhome\java
이렇게 지정해 주면, 자바 실행기는 현재 디렉토리의 .class 파일을 찾지 않게 되고, 그래서 위의 에러가 발생합니다.


도스창에서
set
이라고 치면 현재 환경변수들이 출력됩니다.


자바 1.5의 경우에는 CLASSPATH 환경변수가 없어도 되기에, 초보자의 경우에는 CLASSPATH 를 지정할 필요가 없습니다. (이 경우 CLASSPATH 환경 변수를 삭제하면 문제가 없어집니다.)

다만 자신의 라이브러리가 있을 때에는 CLASSPATH 를 지정해야 하는데, "마침표+세미콜론(;)"을 찍고 그 뒤에 디렉토리를 적어 줍니다.


윈도우에서, 환경변수 변경 방법은 여기에 있습니다: ▶▶ '환경변수'란 무엇인가요? 환경변수 변경/추가/삭제하는 법은? - Environment Variable


주의!

도스창에서 그냥 set 명령으로 환경변수를 변경하면, 그 설정이 윈도우에 저장되지 않습니다. 도스창을 종료하면 설정도 사라집니다. 따라서 위의 방법대로 변경해야 합니다. 그러고 나서 현재의 도스창을 종료하고, 다시 도스창을 띄운 후 자바를 실행해 보시기 바랍니다.



▶▶ [Java/자바 기초] java 소스 컴파일하고, class 실행하기

☞ 자바

3 Comments:
At 11:33 AM, Blogger Kyu-Chul said...

많은 도움이 되었습니다 :)

즐거운 하루 보내시길!

 
At 6:41 PM, Blogger mwultong said...

반갑습니다

 
At 2:40 PM, Blogger ekwang said...

감사합니다. 도움이 되었습니다. 일부 인용하겠습니다~

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top