0

すべての例外をキャッチしてからエラーを表示するように、try/catch を設定しました。

これが私のコードです:

try {
    //CODE THAT COULD ERROR HERE
} catch (final Exception e) {
    System.err.println("Unexpected error: " + e.getStackTrace()[0]);
}

上記のコードは、エラーが発生した最後のクラスを教えてくれます。エラーが発生した MY PROGRAM の LAST クラスを検出するにはどうすればよいですか?

出力例: 「予期しないエラー: package.ClassName.method(ClassName.java:46)」

プログラムが原因でエラーが発生した組み込み Java クラスの行ではなく、エラーが発生したプログラムの行を出力したいのです。

4

3 に答える 3

3
e.printStackTrace()

あなたをもっと幸せにするかもしれません。または、適切なメソッドから利用可能なスタック トレース エントリの配列の先頭を出力します。

http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getStackTrace ()

それらを返します。最初のものはあなたが求めているものです。

于 2012-05-12T21:15:35.190 に答える
1

を使用getStackTraceしてインスタンスの配列を取得StackTraceElementし、パッケージやクラス名に基づいてフィルタリングできます(getClassName各要素に使用して、そのスタックトレースフレームの完全修飾クラス名を取得します)。これにより、例外が発生したJDKクラスではなく、コードに分類できます。

于 2012-05-12T21:29:40.487 に答える
1
        try {
            //error producing code
        } catch (Exception e) {
            for (StackTraceElement s : e.getStackTrace()) {
                if (!s.getClassName().startsWith("java.")) {
                    System.out.println("file name: " + s.getFileName());
                    System.out.println("class name: " + s.getClassName());
                    System.out.println("method name: " + s.getMethodName());
                    System.out.println("line number: " + s.getLineNumber());
                    System.out.println();
                    //break; // will be the highest non java package...
                }
            }
        }

もちろん、パッケージ固有に切り替えることができるのでif (s.getClassName().startsWith("com.company")) {、サードパーティのライブラリや、sun パッケージまたはその他の非 Java パッケージ内の何かに返されません。

于 2012-05-12T21:54:54.040 に答える