2011-11-16 68 views
10

我做內搭ELF文件的應用程序(*和*的.o。),並給出方法名稱列表中,但如果有人重命名的任何文件到*某或*的.o然後它會顯示:如何捕獲java.lang.NoClassDefFoundError?

Exception occurred during event dispatching: 
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IWorkspaceRunnable 
    at org.eclipse.cdt.utils.AR.<init>(AR.java:237) 
    at com.lge.windowELF.ElfBinaryArchive.<init>(ElfBinaryArchive.java:24) 
    at com.lge.windowELF.ELFParserLibraryFile.createBinaryArchive(ELFParserLibraryFile.java:230) 
    at com.lge.windowELF.ELFParserLibraryFile.<init>(ELFParserLibraryFile.java:46) 
    at com.lge.windowELF.ELFWrapper.<init>(ELFWrapper.java:36) 
    at com.lge.windowELF.ELF_UIIntegrated.actionPerformed(ELF_UIIntegrated.java:510) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 

在這種情況下,我想給出一些警告信息。這個異常不被try/catch捕獲。

+0

尋找應該包含'IWorkspaceRunnable'類或接口的JAR文件。它是否存在於你的類路徑中? –

+0

可能重複的[何時趕上java.lang.Error?](http://stackoverflow.com/questions/352780/when-to-catch-java-lang-error) – adatapost

+0

它可以通過抓住這個特定的錯誤或「Throwable」。但可能是你應該更優雅地處理你的代碼中丟失的文件條件... – aishwarya

回答

4

這是不鼓勵趕上Error! JavaDoc的狀態:

Error是Throwable的子類,表示嚴重的問題 合理的應用程序不應該試圖捕獲。

我的建議是,你整理了NoClassDefFoundError,並且擔心代碼拋出的異常。

我寧願在代碼,扔在ElfBinaryArchive構造函數類的InvalidELFFileException(猜測)(或包裹類實例化時做throws)上課的時候嘗試打開ELF文件。這樣,如果有一個無效的ELF文件,就會拋出一個體面的異常。

或者,確保org.eclipse.core.resources.IWorkspaceRunnable必須放在CLASSPATH中。

+15

Downvote,因爲__不應該__不一樣__必須不___或__never__,不應該意味着它被允許,只是不推薦。如果有人問「我怎麼做一些事情?」,說「_Just do not do it_」通常是沒有幫助的。即使你的回答可能有幫助,我甚至會認爲這很粗魯。 – Mecki

+5

我從來不知道我們是基於英語的使用downvoting。我認爲SO是基於編程相關的解決方案。如果這是基於英文的話,那麼不應該對英文StackExchange更有利嗎? (請參閱[示例](http://english.stackexchange.com/questions/56065/must-not-or-may-not-which-is-the-most-correct))。 –

+1

一位用戶問你如何做某事,你告訴他他不應該這樣做,這就是爲什麼你被低估了。你不應該這樣做是__無法回答問題___。 – Mecki

43

NoClassDefFoundErrorError的一個小類,而不是Exception。因此,您需要使用:

try { 
    new org.eclipse.cdt.utils.AR(); 
} 
catch(NoClassDefFoundError e) { 
    //handle carefully 
} 

在您的代碼中。請注意,你不應該抓住ErrorThrowable。此外請確保您使用此catch代碼儘可能少代碼,因爲通常不應捕獲此異常。

更新:你也確定要抓住這個異常嗎?這是非常罕見的,我無法想象你想如何處理它。也許你應該在你的CLASSPATH中添加一個帶有IWorkspaceRunnable類的JAR?

+2

這個答案好多了,它應該是被接受的,因爲它實際上真的回答了問題,同時有助於解決真正的問題。 – Mecki

+1

可能是您想要捕捉它的情況。在Web應用程序容器中重新部署應用程序時。然後有一個會話銷燬監聽器,並且它試圖找到一個不在類路徑中的類,因爲它已被取消部署。 – ACV

+0

這裏有一個情況:我在我的classpath中有所需的jar,但是我將代碼分發給那些可能不想並且想要確保他們知道如何在他們嘗試運行時添加它的人 – Luke