2

有没有什么好的函数可以收集字符串中异常的所有原因?该方法printStackTrace()使用 StackTraces 收集它们:

   HighLevelException: MidLevelException: LowLevelException
           at Junk.a(Junk.java:13)
           at Junk.main(Junk.java:4)
   Caused by: MidLevelException: LowLevelException
           at Junk.c(Junk.java:23)
           at Junk.b(Junk.java:17)
           at Junk.a(Junk.java:11)
           ... 1 more
   Caused by: LowLevelException
           at Junk.e(Junk.java:30)
           at Junk.d(Junk.java:27)
           at Junk.c(Junk.java:21)
           ... 3 more

但我只想要getMessage()原因:

   HighLevelException: MidLevelException: LowLevelException
   Caused by: MidLevelException: LowLevelException
   Caused by: LowLevelException

我应该编写自己的函数吗?

4

2 回答 2

6

是的,您必须为此编写一个简单的方法

static String message(Throwable e) {
    StringBuilder sb = new StringBuilder();
    sb.append(e.getMessage());
    Throwable t = e.getCause();
    while (t != null) {
        sb.append("\nCaused by: ").append(t.getMessage());
        t = t.getCause();
    }
    return sb.toString();
}
于 2013-07-31T06:52:53.530 回答
1

您可以创建自定义异常并覆盖 getMessage() 函数。

这是我收集 Stacktraces 的示例:

@Override
public String getMessage()
{
    for (StackTraceElement element : this.getStackTrace() ){
              result.append( element );
              result.append( NEW_LINE );
            }
            return result.toString();
}

您可以使用自己的代码版本来满足您的要求。

于 2013-07-31T08:05:20.297 回答