2013-08-31 4 views
30

Javaで完全な例外メッセージを取得するにはどうすればよいですか?スタックトレースを文字列として

私はJavaアプリケーションを作成しています。実行時例外がある場合は、JTextAreaJDialogがポップアップします。私は自分のアプリケーションで実行時例外を作ってみましたが、例外メッセージを示すテキスト領域は次のようになります。

java.lang.ClassNotFoundException: com.app.Application 

は、しかし、私のようなものを表示するために私のテキスト領域をしたい:

enter image description here

私が試した

String ex = e.toString(); 
this.addText(ex); 

ここtrycatchに囲まれた私のコードの一部でありますe.getLocalizedMessage()e.getMessage()を使用してください。ただし、どちらも動作しません。

+0

は私が提供した更新の答えをチェックしてください。トレースを文字列形式に変換して表示することができます。 –

+1

'ExceptionObject.printStackTrace(); 'を使用 –

+0

文字列部分へのスタックトレースだけ:http://stackoverflow.com/questions/1149703/how-can-i-convert-a-stack-trace-to-a-string –

答えて

68

あなたはまた、この機能を提供コモンズ-のlang-2.2.jarのApache Commonsのラングライブラリを使用することができますThrowable#printStackTrace(PrintWriter);

try{ 

}catch(Exception ex){ 
    String message = getStackTrace(ex); 
} 

public static String getStackTrace(final Throwable throwable) { 
    final StringWriter sw = new StringWriter(); 
    final PrintWriter pw = new PrintWriter(sw, true); 
    throwable.printStackTrace(pw); 
    return sw.getBuffer().toString(); 
} 

を呼び出す必要があります:

public static String getStackTrace(Throwable throwable) 
Gets the stack trace from a Throwable as a String. 

ExceptionUtils#getStackTrace()

+0

それは動作します!ありがとうございました – Jeremy

+0

恐ろしい! AndroidのInputStreamエラーで私を助けました:) – tvieira

1

てみてくださいe.printStackTrace()、あなたの例外のトレースを出力します。

0

これは完全な例外メッセージです。

あなたはより多くの情報がe.printStackTraceを(しようとする場合)

、あなたは、あなたが任意のロガー(のLog4jまたはOracleロガーAPI)を使用していない場合は、

3

をpostet絵に見るものexcatly取得しますあなたはロガーAPIを使用している場合、あなたはその後、

以下のステートメントを使用し、完全な例外メッセージ

try{ 
     // statement which you want to monitor 

}catch(Exception e){ 
    e.printStackTrace() 
    // OR System.err.println(e.getStackTrace()); 
    // OR System.err.println(e); 
    // OR System.err.println(e.getMessage()); 
    // OR System.err.println(e.getCause()); 
} 

を印刷するには、以下のステートメントを使用することができます

1

e.printStackTraceは、あなたがこれらの行を使用することができます文字列にスタックトレースを取得するには、完全なスタックトレース

4

を与える:

CharArrayWriter cw = new CharArrayWriter(); 
    PrintWriter w = new PrintWriter(cw); 
    e.printStackTrace(w); 
    w.close(); 
    String trace = cw.toString(); 
+0

あなたのコードは動作しません... – Jeremy

+0

あなたは正しいです、更新を参照してください。 – Henry

+0

ありがとう、それも動作します – Jeremy

0
public static String getStackMsg(Throwable e) { 
    StringBuffer sb = new StringBuffer(); 
    sb.append(e.toString()).append("\n"); 
    StackTraceElement[] stackArray = e.getStackTrace(); 

    for(int i = 0; i < stackArray.length; ++i) { 
     StackTraceElement element = stackArray[i]; 
     sb.append(element.toString() + "\n"); 
    } 

    return sb.toString(); 
} 
関連する問題