27

Exceptionチェーンされた多くの例外のすべての詳細なメッセージを含む詳細なメッセージを含む"final" をスローする方法を知りたいです。

たとえば、次のようなコードがあるとします。

try {
  try {
    try {
      try {
        //Some error here
      } catch (Exception e) {
        throw new Exception("FIRST EXCEPTION", e);
      }
    } catch (Exception e) {
      throw new Exception("SECOND EXCEPTION", e);
    }
  } catch (Exception e) {
    throw new Exception("THIRD EXCEPTION", e);
  }
} catch (Exception e) {
  String allMessages = //all the messages
  throw new Exception(allMessages, e);
}

私は完全stackTraceには興味がありませんが、私が書いたメッセージだけに興味があります。つまり、次のような結果が欲しいです。

java.lang.Exception: THIRD EXCEPTION + SECOND EXCEPTION + FIRST EXCEPTION
4

7 に答える 7

3

このように使用するとmessage()、前Exceptionのものmessage()と新しいものをマージExceptionできますthrow

      } catch (Exception e) {
          throw new Exception("FIRST EXCEPTION" + e.getMessage(), e);
      }
于 2013-04-13T11:27:36.497 に答える
1

チェーンされた例外を文字列に変換するための優れたユーティリティを次に示します。

public final class ThrowableUtil {

    private ThrowableUtil() {}

    public static String chainedString(@NonNull Throwable throwable) {
        StringBuilder SB = new StringBuilder(throwable.toString());
        while((throwable = throwable.getCause()) != null)
            SB.append("\ncaused by ").append(throwable);
        return SB.toString();
    }

    public static String chainedString(@NonNull String msg, @NonNull Throwable throwable) {
        StringBuilder SB = new StringBuilder(msg);
        do {
            SB.append("\ncaused by ").append(throwable);
        } while((throwable = throwable.getCause()) != null);
        return SB.toString();
    }

}

出力例:

ThrowableUtil.chainedString(e);

生産する

java.io.IOException: Failed to create required video encoder
caused by java.lang.RuntimeException: Invalid mime type

別の出力例:

ThrowableUtil.chainedString("Writing of media file failed", e);

生産する

Writing of media file failed
caused by java.io.IOException: Failed to create required video encoder
caused by java.lang.RuntimeException: Invalid mime type
于 2021-01-24T16:26:50.410 に答える