2011-05-08 28 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文件。我通過進入dist /文件夾進行修復,其中整個項目以jar包的形式打包並運行爲java -jar search.jar

感謝您的所有反饋!

+3

這個課程在一個包裏嗎?班級的名字是什麼?你能顯示班級的簽名嗎?這就是開始的那一行......'public class MyClass {'這個類是什麼包? – 2011-05-08 04:31:10

回答

2

NoClassDefFoundError的經典原因是由該類的靜態初始化程序引起的異常。

+2

雖然現在我想到了,但是當類文件中的類名稱與類文件的名稱(包括包)不匹配時,它也會出現。 – 2011-05-08 04:35:41

+1

這是我的懷疑,一個常見的原因是沒有正確使用軟件包名稱。 – 2011-05-08 04:36:18

3

如果您的課程在包裝中,那麼您必須傳遞課程的全名。

package org.example; 

public class Search { 
    ... 
} 

你將不得不運行它

java org.example.Search 

當前目錄中必須包含org子目錄,在其又包含example目錄下Search.class所在。您可以使用-cp參數來指定類文件的位置。

相關問題