2011-07-06 2 views
-1

私は、次のコードなぜcpがコロンで終了しない場合、class.getClassLoader()がnullポインタをスローしますか?

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(); 
    } 
} 

を持っており、クラスは非常によくコンパイルする - これはスタンジェです。私はこの方法でクラスを起動した場合、私はNULLポインタキャッチ:

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 

なぜこれがあるとどのように私はこの問題を回避することができますか?

おかげで、 クリス

+1

それはあなたのコードが何によるものではありません。それを実行する主なクラスが見つからないだけです。 nullポインタはまったくありません。 – SJuan76

+0

パス値を引用符で囲む必要はありません。 Char:Linux上のパス区切り文字です。 – 01es

+1

'NoClassDefFoundError'があります。ここで' NullPointerException'をキャッチしていますか? (または、あなたの質問のタイプミスですか?) –

答えて

2

このビット予期しません。

私は、javaがあなたのJARファイル内にFileUtilsクラスを見つけられていないと考えています。むしろ、javaコマンドが空のクラスパスエントリを解釈して現在のディレクトリを意味しているので、現在のディレクトリでそれが見つかったと思われます。

これは、online documentationによれば、 "。現在のディレクトリを参照します。


(注:これは唯一の理論である...)

+0

私の理論も... *空のクラスパスエントリ*はありませんoraclesページ... –

関連する問題