2011-08-03 7 views

答えて

7

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) 
0

は、いくつかのException S(と一般的には、いくつかのThrowable sが)ない原因を持っています。 docsで述べたように:

原因が存在しないか不明 であれば、このThrowableまたはnullの原因を返します。 (原因は、この スロー可能オブジェクトをスローさせたThrowableです。)

JGが指摘するように、printStackTrace()は良い選択肢です。

1

スタックトレースが原因と異なります。例外を作成する場合

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"; 
    } 
} 
関連する問題