如何捕获java.lang.NoClassDefFoundError?

我创建了一个应用程序,它接受elf文件(* .a和* .o)并给出方法名称列表,但是如果有人将任何文件重命名为* .a或* .o,那么它将显示:

Exception occurred during event dispatching: java.lang.NoClassDefFoundError: org/eclipse/core/resources/IWorkspaceRunnable at org.eclipse.cdt.utils.AR.(AR.java:237) at com.lge.windowELF.ElfBinaryArchive.(ElfBinaryArchive.java:24) at com.lge.windowELF.ELFParserLibraryFile.createBinaryArchive(ELFParserLibraryFile.java:230) at com.lge.windowELF.ELFParserLibraryFile.(ELFParserLibraryFile.java:46) at com.lge.windowELF.ELFWrapper.(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没有捕获此exception。

抓住Error 并不鼓励 ! JavaDoc声明:

Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题。

我的建议是你整理NoClassDefFoundError并担心代码抛出的exception。

我宁愿在代码中,在类尝试打开ELF文件时,在ElfBinaryArchive构造函数类上抛出一个ElfBinaryArchive (有根据的猜测)(或者在实例化时包装类并执行throws )。 这样,如果存在无效的ELF文件,则抛出一个体面的exception。

或者,确保必须将org.eclipse.core.resources.IWorkspaceRunnable放入CLASSPATH中。

NoClassDefFoundErrorError的子类,而不是Exception 。 因此你需要使用:

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

在你的代码中。 请注意,您不应该捕获ErrorThrowable 。 此外,请确保使用此catch尽可能少的代码,因为此exception通常不会被捕获。

更新:您还确定要捕获此exception吗? 这是非常罕见的,我无法想象你想如何处理它。 也许你应该只在你的CLASSPATH中添加一个带有IWorkspaceRunnable类的JAR?