如何捕获java.lang.NoClassDefFoundError?

如何捕获java.lang.NoClassDefFoundError?,java,exception-handling,classnotfoundexception,Java,Exception Handling,Classnotfoundexception,我制作了一个应用程序,它接受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)

我制作了一个应用程序,它接受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)
事件分派期间发生异常:
java.lang.NoClassDefFoundError:org/eclipse/core/resources/iWorkSpaceUnable
在org.eclipse.cdt.utils.AR.(AR.java:237)
位于com.lge.windowELF.ElfBinaryArchive。(ElfBinaryArchive.java:24)
位于com.lge.windowELF.ELFParserLibraryFile.createBinaryArchive(ELFParserLibraryFile.java:230)
位于com.lge.windowELF.ELFParserLibraryFile。(ELFParserLibraryFile.java:46)
在com.lge.windowELF.ELFWrapper上。(ELFWrapper.java:36)
在com.lge.windowELF.ELF_UIIntegrated.actionPerformed上(ELF_UIIntegrated.java:510)
在javax.swing.AbstractButton.fireActionPerformed(未知源)
位于javax.swing.AbstractButton$Handler.actionPerformed(未知源)
在javax.swing.DefaultButtonModel.fireActionPerformed(未知源)
位于javax.swing.DefaultButtonModel.setPressed(未知源)
位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知源代码)
位于java.awt.Component.ProcessMouseeEvent(未知源)
位于javax.swing.JComponent.ProcessMouseeEvent(未知源)

在这种情况下,我想发出一些警告信息。try/catch未捕获此异常。

NoClassDefFoundError
Error
的子类,而不是
异常。因此,您需要使用:

try {
  new org.eclipse.cdt.utils.AR();
}
catch(NoClassDefFoundError e) {
  //handle carefully
}
在你的代码中。请注意,您不应该捕获
错误
可丢弃的
。另外,请确保使用此
catch
尽可能少地包围代码,因为此异常通常不会被捕获


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

不鼓励捕获一个!JavaDoc声明:

错误
是Throwable的一个子类,表示存在严重问题 合理的应用程序不应试图捕获

我的建议是整理一下
NoClassDefFoundError
,然后担心代码引发的异常

我更愿意在代码中,当类尝试打开ELF文件时,在
ElfBinaryArchive
构造函数类上抛出
InvalidELFFileException
(有根据的猜测)(或者包装该类并在实例化时执行
抛出
)。这样,如果有一个无效的ELF文件,就会抛出一个正常的异常


或者,确保必须将
org.eclipse.core.resources.IWorkspaceRunnable
放在类路径中。

查找应该包含
IWorkspaceRunnable
类或接口的JAR文件。它是否存在于您的类路径中?捕获此特定错误或可丢弃的
可以捕获它的可能副本。但可能您应该更优雅地处理代码中的丢失文件情况…Downvote因为不应该与不得或从不相同,不应该意味着它是允许的,只是不推荐。如果有人问“我是如何做某件事的?”,通常说“就是不做”是没有帮助的;我甚至认为这是粗鲁的,即使你的答案可能是有帮助的。我从来不知道我们是在使用英语的基础上减少投票。我认为这是基于编程相关的解决方案。如果这是基于英语,那么这篇文章不应该对英语交流更有益吗?(请参阅)。一个用户问你如何做某件事,你告诉他他不应该做,这就是你被否决的原因。这不是问题的答案,告诉他不应该这样做也不是问题的答案。问题仍然是:如何捕获java.lang.NoClassDefFoundError?你到底在哪里回答的?你没有。如果我不知道怎么做,读了你的答案后我还是不知道。你可以和我争论一整天,这不会改变事实。你没有回答这个问题;时期你的答案中没有任何一部分说明如何抓住这个例外,这就是问题所在;时期Tomasz Nurkiewicz已经回答了这个问题,显示了一个捕获异常的try块(这是问题的正确答案,没有其他异常)。将您的答案标记为“非答案”。现在停止这种愚蠢的讨论,这是浪费时间,因为我不会收回否决票;尽力帮助别人是一回事,但回答问题是另一回事。这个答案更好,它应该是被接受的答案,因为它实际上回答了问题,同时也帮助解决了真正的问题。可能是你想要抓住它的时候。在web应用程序容器中重新部署应用程序时。然后有一个会话破坏侦听器,它试图找到一个不再在类路径上的类,因为它已被取消部署。以下是一种情况:我的类路径中有所需的jar,但我正在将代码分发给那些可能不在类路径上的人,并且希望确保他们在尝试运行时知道如何添加它it@ACV谢谢你解释我为什么会犯这个错误!