2011-07-06 2 views
-1

나는 다음과 같은 코드왜 cp가 콜론 (:)으로 끝나지 않으면 class.getClassLoader()가 널 포인터를 던집니까?

public static void main(String args[]) throws Exception { 
ClassLoader sysClassLoader = Thread.currentThread().getContextClassLoader(); 

URL[] urls = ((URLClassLoader)sysClassLoader).getURLs(); 
    String cp = ""; 
    for(int i=0; i< urls.length; i++) 
    { 
     String ffile = (String) urls[i].getFile(); 
    } 
} 

을 그리고 클래스는 아주 잘 컴파일 - 그러나 이것은 이상한입니다. 나는이 방법은 모든 괜찮 그것을 시작할 때

java -cp "foo.jar" FileUtils 
Exception in thread "main" java.lang.NoClassDefFoundError: FileUtils 

:하지만

java -cp "foo.jar:" FileUtils 
File:/home/u/wzhkit/java/foo.jar 

왜이 내가이이 문제를 어떻게 얻을 수있는 I 클래스 이런 식으로 시작하면, 내가 널 포인터를 잡아?

감사합니다, 크리스

+1

그것은 코드가 무엇 때문 아니다 단순히 주 클래스를 찾을 수 없습니다. null 포인터가 전혀 없습니다. – SJuan76

+0

경로 값을 따옴표로 묶을 필요가 없습니다. Char : Linux에서 경로 구분 기호입니다. – 01es

+1

'NoClassDefFoundError'를 봅니다. 어디에서'NullPointerException'을 잡을 수 있습니까? (또는 귀하의 질문에 오타가 무엇입니까?) –

답변

2

이 조금 의외.

나는 java이 JAR 파일에서 FileUtils 클래스를 찾지 못한다고 생각합니다. 오히려 java 명령이 빈 클래스 경로 항목을 해석하여 현재 디렉토리를 의미하기 때문에 현재 디렉토리에서 찾은 것으로 의심됩니다.

online documentation에 따르면 "."을 사용해야합니다. 현재 디렉토리를 나타냅니다.


(참고 :이 단지 이론이다 ...)

+0

내 이론도 있습니다. * 빈 classpath 항목 *에 대한 메모가 없습니다. 오카클 페이지 ... –

관련 문제