2011-05-08 7 views
1

NetBeansのJavaプロジェクトで作業しています。プロジェクトの実行ボタンを押すと完全に動作します。しかし、私は端末からプログラムを実行する必要があります。私は、クラスファイル、search.classを含むディレクトリを開いて、私はエラーを取得しかし.classファイルが存在するときのJava NoClassDefFoundError

java search 

でそれを実行してみました:

Exception in thread "main" java.lang.NoClassDefFoundError: search (wrong name: search/search) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

私は私の人生は、なぜ把握することはできませんのためにそのディレクトリにsearch.classが存在するため、「間違った名前」と表示されます。私の唯一の考えは、自分のプログラムから呼び出される.jarファイル(同じディレクトリにあります)があり、おそらく実行時にそれらを組み込む必要があるということです。

ご協力いただければ幸いです!

編集:それはおそらく、.jarファイルを含めないと問題になることが判明しました。プロジェクト全体がjarとしてパッケージ化され、java -jar search.jarとして実行されるdist /フォルダーに移動することで修正しました。

ありがとうございました!

+3

このクラスはパッケージに入っていますか?クラスの名前は何ですか?クラスの署名を表示できますか?それが始まる行です... 'public class MyClass {'クラスはどのパッケージに入っていますか? –

答えて

2

NoClassDefFoundErrorの古典的な理由は、クラスの静的初期化子から生じる例外です。

+2

これで、クラスファイル内のクラス名がパッケージを含むクラスファイルの名前と一致しない場合も考えられます。 –

+1

これは私の疑惑であり、その一般的な理由はパッケージ名を正しく使用していないためです。 –

3

クラスがパッケージ化されている場合は、そのクラスのフルネームを渡す必要があります。

package org.example; 

public class Search { 
    ... 
} 

あなたはその順番にSearch.classが配置されているexampleディレクトリが含まれているorgサブディレクトリが含まれている必要があり

java org.example.Search 

カレントディレクトリとしてそれを実行する必要があります。 -cpパラメータを使用して、クラスファイルの場所を指定できます。

関連する問題