3

次のコードがあります

try {
   xpathInstance = XPath.newInstance(xpathExpr);
       list = (Text) xpathInstance.selectSingleNode(doc);
} catch (JDOMException e) {
   throw new Exception(e);
}

jdom.jar ライブラリに依存するライブラリを含めるのを忘れていました。アプリケーションを実行すると、このエラーが発生しました。

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at org.jdom.xpath.XPath.newInstance(XPath.java:134)
at com.myapp.parser.GenericXMLParser.getSingleNodeValue(GenericXMLParser.java:63)

JDOM のドキュメントによると、newInsance() メソッドは JDOMEXCeption をスローするため、エラーをキャッチする必要はありませんでしたか?

また、不明な例外を回避するために catch(Exception e) 句を追加する必要がないようにするにはどうすればよいですか。

ありがとう

4

3 に答える 3

4

jdom.jar ライブラリに依存するライブラリを含めるのを忘れていました。アプリケーションを実行すると、このエラーが発生しました。

CLASSPATHにあると予想されていたが見つからなかったクラスに対してスローされた実行時エラーで見られたエラー。jdom.jar実際にクラスが含まれている場合はorg/jaxen/NamespaceContext、この問題を修正する必要があります。

JDOM のドキュメントによると、newInsance() メソッドは JDOMEXCeption をスローするため、エラーをキャッチする必要はありませんでしたか?

いいえ、これは ではありません。JDOMExceptionであるNoClassDefFoundErrorため、キャッチしません。最も重要なことは、これは JDOM クラスが画像に表示される前に発生することです。つまり、クラスのロード中に発生します。

また、不明な例外を回避するために catch(Exception e) 句を追加する必要を回避するにはどうすればよいですか

一般に、 NoClassDefFoundErrorは のカテゴリに分類されるエラーのタイプであるため、 キャッチしようとすべきではありません。リフレクションとキャッチを使用して回避することはできますが、一般的に述べたように、これは回復できない例外であるため、キャッチしようとする試みはおそらく議論の余地があります。failures from which recovery is not feasibleClassNotFoundException

于 2011-04-30T16:06:04.967 に答える
4

この例外は、コンストラクターによって発生しません。クラスローダーによって発生します。コンストラクターが実行されるずっと前にクラスをロードしようとすると、クラスが見つからず、処理されていないこの例外 (クラス定義が見つかりませんエラー) が発生しました (BTW エラーは処理できません)。

于 2011-04-30T15:56:10.590 に答える
1

投げなかったから捕まらなかった。スローされた例外はjava.lang.NoClassDefFoundError

そして、例外をキャッチしたい場合は、それをキャッチする必要があります。これを回避するためにできることは何もありません。それは、例外のポイント全体を無効にするようなものです。

于 2011-04-30T15:53:49.600 に答える