我创建了一个应用程序,它接受elf文件(* .a和* .o)并给出方法名称列表,但是如果有人将任何文件重命名为* .a或* .o,那么它将显示:
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 :(得分:53)
NoClassDefFoundError
是Error
的子类,而不是Exception
。因此,您需要使用:
try {
new org.eclipse.cdt.utils.AR();
}
catch(NoClassDefFoundError e) {
//handle carefully
}
你的代码中的。请注意,您不应该抓住Error
或Throwable
。另外,请确保使用此catch
尽可能少地包含代码,因为此异常通常不会被捕获。
更新:您确定要捕获此异常吗?这是非常罕见的,我无法想象你想如何处理它。也许您应该只将IWorkspaceRunnable
类的JAR添加到CLASSPATH?
答案 1 :(得分:4)
不鼓励抓住Error
! JavaDoc声明:
Error
是Throwable的子类,表示严重问题 合理的应用程序不应该试图抓住。
我的建议是你整理NoClassDefFoundError
并担心代码抛出的异常。
我宁愿在代码中,在InvalidELFFileException
构造函数类上抛出ElfBinaryArchive
(有根据的猜测)(或在实例化时包装类并执行throws
)打开ELF文件。这样,如果有一个无效的ELF文件,就会抛出一个不错的异常。
或者,请确保org.eclipse.core.resources.IWorkspaceRunnable
必须放在CLASSPATH中。