如何捕获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中。
NoClassDefFoundError
是Error
的子类,而不是Exception
。 因此你需要使用:
try { new org.eclipse.cdt.utils.AR(); } catch(NoClassDefFoundError e) { //handle carefully }
在你的代码中。 请注意,您不应该捕获Error
或Throwable
。 此外,请确保使用此catch
尽可能少的代码,因为此exception通常不会被捕获。
更新:您还确定要捕获此exception吗? 这是非常罕见的,我无法想象你想如何处理它。 也许你应该只在你的CLASSPATH中添加一个带有IWorkspaceRunnable
类的JAR?
- org.h2.Driver的java ClassNotFoundException
- ClassNotFoundException与NoClassDefFoundError
- 通过CLI执行testng.xml时出错:无法找到或加载主类org.testng.TestNG
- 未在Web服务器中运行时,库中的Java重载方法失败
- Java类存在于类路径中,但启动失败,错误:无法找到或加载主类
- 使用Guice 2.0的ClassNotFoundException
- 调试ClassNotFoundException
- ClassNotFoundException:com.mysql.jdbc.Driver
- 用于eclipse的tomcat中的servlet的java.lang.ClassNotFoundException