2010-02-10 150 views
40

在Eclipse中,我有一個Java項目,運行流暢,直到今天下午,當我更新了一些文件(包括一個ant build.xml文件)。當我構建該項目時,出現以下錯誤:奇怪的「java.lang.NoClassDefFoundError」在Eclipse中

java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter 
Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) at 
    java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
Exception in thread "main" 

有沒有人有問題的線索?

回答

9

java.lang.ClassNotFoundException表示CLASSPATH問題。沒有線索意味着你假設CLASSPATH設置正確,但事實並非如此。

如果您使用Eclipse構建,請確保編譯後的.class文件所在的目錄位於CLASSPATH中,並且其中包含必需的.class文件。

如果你用Ant構建,確保你看到這樣的事情在你的build.xml:

<path id="production.class.path"> 
    <pathelement location="${production.classes}"/> 
    <pathelement location="${production.resources}"/> 
    <fileset dir="${production.lib}"> 
     <include name="**/*.jar"/> 
     <exclude name="**/junit*.jar"/> 
     <exclude name="**/*test*.jar"/> 
    </fileset> 
</path> 

UPDATE:要麼你沒有JAVA_HOME /斌在你的路徑,也下載了JRE而不是JDK。檢查安裝Java的目錄,並查看/ bin目錄是否包含javac.exe。如果您沒有/ bin,請下載JDK並安裝它。

如果您確實在其中包含javac.exe的/ bin,請檢查PATH以查看Java/bin目錄是否位於PATH中。一旦你設置了它,打開一個命令shell並輸入「javac -version」以確保一切正常。

你告訴Eclipse使用了什麼JDK?

+0

一切似乎都很好。我剛剛注意到,如果我構建build.xml文件失敗,並顯示以下錯誤:「運行javac.exe編譯器時出錯指向構建文件的這一行: '' 看來編譯器不見了,你認爲以前的錯誤與這個有關?非常感謝! – Anto

+0

我確實將JAVA_HOME/bin變量設置爲包含javac.exe文件的bin文件夾(它是jdk 1.6.0_18)。在Eclipse的Install JRE部分中,我添加了jdk 1.6.0_18,因此所有內容似乎都完美無缺。我注意到的一件事(我不知道它是否相關)是在項目的屬性對話框中的「Java編譯器」部分中,「使用Java Build Path上的執行環境的合規性」總是禁用,無法啓用,而在其他項目中,這個問題不存在....感謝您的幫助! – Anto

0

兩個問題會因爲classpathref =「主類路徑」時,請確認值是正確的

+0

那麼你認爲這將是更好地從構建文件中刪除'classpathref =「主classpath'並在Eclipse中創建一個classpath變量? – Anto

+0

請針對第二個問題 運行錯誤檢查這對於第一個問題 javac.exe編譯器指向構建文件的這一行: javac不會存在的機會不大......問題可能是因爲一些其他參數是錯誤的,所以 所以在eclipse中配置類路徑並給出類似這樣的語句 sreejith

1

我看到這個有點過於頻繁最近。就在今天,我遇到了與受影響(紅旗)班級相同的課程中的問題!

退出eclipse並重新啓動通常可以解決受影響的類上的紅色標誌,但有時項目上會留下紅色標誌,那麼我還需要關閉項目並重新打開它,以便擺脫獨立的紅色旗。在一個項目上看到一個紅色標誌看起來很奇怪,在它的任何子目錄中都沒有紅旗。

使用maven項目集羣,在重新啓動eclipse後關閉並打開集羣中的所有項目。

1

這似乎是一個常見的錯誤。解決的辦法是:

  • 右擊工程
  • 選擇屬性
  • 選擇「Java編譯器」
  • 取消勾選第一個框說「啓用項目特定設置」
  • 申請
  • 保存
  • 運行

希望這有助於在某些情況下。

+2

[匿名用戶評論](http://stackoverflow.com/suggested-edits/212846):「4: - 點擊'啓用項目特定設置'並設置'添加Java合規性級別1.5',否則會導致錯誤」 – Rup

+0

仍然無法正常工作特別是在將補間引擎實施到libs文件夾後立即解決問題時。我必須找到一種方法來運行Android設備。順便說一句,我使用「'java-universal-tween-engine'」。 –

+0

我在Android上有同樣的問題,這解決了我的問題,我dono如何或爲什麼發生這種情況,但謝謝:) –

1

雖然這是一個瘋狂的猜測,可能不適用於您的具體情況,這可能節省了我一個小時左右。

如果您已經將一個普通項目「轉換」爲Java項目(通過編輯.project文件並添加適當的標籤),請確保您也有適當的指定 - 即使Eclipse嘗試並運行沒有建設者(成功!):

<buildSpec> 
    <buildCommand> 
     <name>org.eclipse.jdt.core.javabuilder</name> 
     <arguments> 
     </arguments> 
    </buildCommand> 
</buildSpec> 
1

我也面臨同樣的問題。然後發現沒有正確設置類路徑中lib文件夾的路徑。

1

在黑暗中刺傷,但我有同樣的確切問題。我通過從工作區中刪除項目(注意不要從磁盤中刪除)解決此問題,然後重新導入項目,並且工作正常。我認爲我的是由一個錯誤的Windows關機造成的(重新啓動Windows正確無法解決問題)。 HTH。

32

在Eclipse中執行Project-> Clean ...爲我解決了這個問題。

+1

我有同樣的問題,這可能是我試圖刪除_bin_我的項目文件夾。感謝您的Clean建議......它對我有用! – FriendFX

+1

另一個常見問題可能是該項目不與文件系統同步。解決方案只是刷新項目(F5)。 –

+0

我嘗試了這個和許多其他的選擇,並沒有工作。 **刪除工作區**僅適用於我。 –

0

當您啓動程序時,它會存儲您可能會修改的啓動配置。如果在構建/運行過程中發生了某些變化,您可能會設置錯誤。例如,我曾經使用maven,並且一些啓動配置引用了maven2_classpath_container。 刪除啓動配置並再次運行程序時,它可以再次運行。

3

如上所述,「java.lang.ClassNotFoundException意味着CLASSPATH問題。」

在我的設置中,我運行Maven構建(而不是Ant)並使用Eclipse(而不是Netbeans)。

通常,要建立和設置項目,我將從Windows命令提示符下運行'mvn clean','mvn compile','mvn eclipse:eclipse'。最後一條命令'mvn eclipse:eclipse'更新項目配置,創建.classpath和.project文件。

爲了解決這個問題,我刪除了兩個文件(.classpath和.project),然後重新運行這三個命令。

因此,根據您的配置,嘗試找到類路徑/項目文件(進行備份)並刪除它們。你也可以嘗試刪除目標/ release/build文件夾(不管是從build命令創建的)。然後嘗試再次構建/打包/配置您的項目。

2

我認爲我的問題和它的解決方案可以幫助。所以我在我的eclipse項目中得到了同樣的錯誤。在我的項目中,我有幾個jar文件,並且在jar文件中引發了NOCLASSDEFERROR文件。

我的庫文件是我的項目heirarchy.I中文件夾名稱「lib」的一部分。我將我的文件夾名稱更改爲「libs」,並說它工作。

(我看着.classpath文件,我不得不鍵值對,和我的jar文件的進入了關鍵名爲「LIB」,因此我想大概是從LIB變化可能會有幫助。)

1

我發現我在我的類路徑中的WEB-INF/lib中有一個jar,但是當我將它升級到最新版本時,文件名是不同的。從類路徑中刪除舊的jar文件並添加新的jar文件解決了問題。奇怪的是,Eclipse似乎並沒有警告我舊的jar文件丟失並且似乎可以編譯,但是沒有任何東西被編譯,因此NoClassDefFoundError。我的線索是build/classes目錄在項目中被設置爲輸出文件夾,但在構建之後沒有創建類文件。

0

我看到人們已經談論過班級路徑。由於沒有被接受的答案,我認爲它與班級路徑無關。所以我想補充一點,沒有package指令也會導致class not found錯誤。

1

轉到構建路徑並檢查jar文件中的錯誤,它們可能會移動到其他位置。如果您在jar文件上有錯誤,則爲 。刪除它們並通過單擊添加外部罐子來找到它們。

-cnufederer

1

確保所有的庫你使用在你的項目沒有被其他項目廉政工作區引用。那是我的問題。

1

我有一個類似的問題,它與java構建路徑引用的庫有關;當我進行更新時,我引用了不再存在的庫。當我刪除這些引用時,項目開始再次運行。

這些庫在項目屬性窗口中的Java Build Path下列出。

希望這會有所幫助。

-1

BY ABDULHAYEE:

的NoClassDefFoundError Java中正值當Java虛擬機無法找到在運行時一個特定的類在編譯時可用。例如,如果我們有一個來自某個類的方法調用或訪問某個Class的靜態成員,並且該類在運行時不可用,那麼JVM將拋出NoClassDefFoundError。理解這一點很重要,它不同於ClassNotFoundException,它只是在運行時加載一個類,而在運行時不是在編譯時提供的。許多Java開發人員混淆了這兩個錯誤並且感到困惑。

總之,如果一個類在編譯時存在,但在運行時在java classpath中不可用,則會出現NoClassDefFoundError。通常情況下,當你得到NoClassDefFoundError時,你會在日誌中看到下面一行: 線程「main」中的異常java.lang.NoClassDefFoundError 線程「main」中的異常僅僅表示它的「主」線程無法找到特定的類可以是任何線程,所以不用擔心。在主線程和其他線程中出現此錯誤的區別在於,當線程「main」中的Exception發生時,程序崩潰或將其自動關閉,而不是其他線程,在這種情況下程序將繼續運行。

瞭解更多: http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz2jr35SsaZ

0

日食工作對我來說:

  1. 轉到項目 - >屬性
  2. 點擊源選項卡上
  3. 清除該複選框 - >允許輸出文件夾源文件夾
  4. 應用更改並運行該項目
0

時java.lang.NoClassDefFoundError可能發生另一次是第二次/後續嘗試過程中實例化後級第一次嘗試失敗的一些其他異常或錯誤。 類加載器似乎緩存知識,它不能在第一次嘗試時實例化類,但不是原因。因此它報告NoClassDefFoundError。

因此,確保沒有錯誤/異常,以前嘗試在實例化類之前嘗試對NoClassDefFoundError進行疑難解答,然後再嘗試下一個兔子洞。

0

如果您使用的是Eclipse項目嘗試>乾淨,然後嘗試重新啓動服務器

0

對我來說,問題是我在其中有一類沒有最新變化「運行配置」配置另一個文件夾。一旦我將它移除後,引用到正確的bin文件夾,它就開始工作。希望它能幫助別人。