私は自分のアプリケーション全体で普遍的に、デフォルトでは例外でこれを呼び出して試してみた:NullPointerException:すべての例外に原因が含まれているとは限りませんか?
String causeClass = e.getCause().getClass().getName();
しかし、私はNullPointerException
秒を取得しています。
原因を検索し、原因の例外のクラス名を取得する安全な方法はありますか?
私は自分のアプリケーション全体で普遍的に、デフォルトでは例外でこれを呼び出して試してみた:NullPointerException:すべての例外に原因が含まれているとは限りませんか?
String causeClass = e.getCause().getClass().getName();
しかし、私はNullPointerException
秒を取得しています。
原因を検索し、原因の例外のクラス名を取得する安全な方法はありますか?
JustinKSUが指摘したように、時には原因はありません。 Throwable#getCause()
から:原因が 存在しないか不明な場合
このThrowableまたはnullの原因を返します。 (原因は、この スロー可能オブジェクトをスローさせたThrowableです。)
この問題が発生し、getCause()
戻りnull
、あなたがgetClass()
を呼び出すときのでNullPointerException
を投げます。おそらく、あなたの代わりにこれを使用することができます:
Throwable t = e.getClause();
String causeClass = t == null ? "Unknown" : t.getClass().getName();
をただし、デバッグ目的のために、私はe.printStackTrace()
がはるかに優れていることがわかります。このようにして、どこに例外がスローされたのかがわかります。ここでprintStackTrace()
からの典型的な出力である:あなたの結果が示しているように
java.lang.NullPointerException
at MyClass.mash(MyClass.java:9)
at MyClass.crunch(MyClass.java:6)
at MyClass.main(MyClass.java:3)
は、いくつかのException
S(と一般的には、いくつかのThrowable
sが)ない原因を持っています。 docsで述べたように:
原因が存在しないか不明 であれば、このThrowableまたはnullの原因を返します。 (原因は、この スロー可能オブジェクトをスローさせたThrowableです。)
JGが指摘するように、printStackTrace()
は良い選択肢です。
スタックトレースが原因と異なります。例外を作成する場合
new Exception("Something bad happened")
例外はありません。
しかし、別の例外で渡す例外を作成すると、原因があります。例:
try {
//do stuff
} catch (IOException ie) {
throw new Exception("That's not good", ie);
}
次に、ie
が原因です。
あなたはこのような何かを行うことができます例外をスローどのクラスかを決定しようとしている場合:
public static String getThrowingClass(Throwable t){
StackTraceElement[] trace = t.getStackTrace();
if(trace != null && trace.length > 0){
return trace[0].getClassName();
} else {
return "UnknownClass";
}
}