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ではキャッチされません。
Error
をキャッチすることは推奨されていません! JavaDocの状態:
Error
はThrowableのサブクラスであり、妥当なアプリケーションがキャッチしようとしてはならない重大な問題を示します。
私の提案は、NoClassDefFoundError
を整理し、代わりにコードによってスローされる例外について心配することです。
むしろ、コードでは、クラスがしようとしたときに、InvalidELFFileException
コンストラクタークラスにElfBinaryArchive
(知識に基づいた推測)をスローします(または、クラスをラップして、インスタンス化するときにthrows
を実行します)。 ELFファイルを開きます。そうすれば、無効なELFファイルがある場合、適切な例外がスローされます。
または、org.Eclipse.core.resources.IWorkspaceRunnable
はCLASSPATHに入れる必要があります。
NoClassDefFoundError
はError
のサブクラスであり、Exception
ではありません。したがって、以下を使用する必要があります。
try {
new org.Eclipse.cdt.utils.AR();
}
catch(NoClassDefFoundError e) {
//handle carefully
}
あなたのコードで。 Error
またはThrowable
をキャッチしてはいけないことに注意してください。また、この例外は通常キャッチされるべきではないため、このcatch
でできるだけ少ないコードを囲むようにしてください。
更新:また、この例外をキャッチしてもよろしいですか?それは非常にまれであり、あなたがそれをどのように扱いたいか想像できません。たぶん、IWorkspaceRunnable
クラスのJARをCLASSPATHに追加する必要がありますか?