把printStackTrace的内容生成为String.
然后就可以从程序中判断深层次的Exception:
public static String getChianedExceptionMsg(Exception e) {
StackTraceElement[] s;
Throwable t = e.getCause();
StringBuffer buf = new StringBuffer();
System.out.println("Exception chain (top to bottom):");
while (t != null) {
System.out.println("-------------------------------");
s = t.getStackTrace();
StackTraceElement s0 = s[0];
buf.append(t.toString());
// System.out.println(t.toString());
buf.append(" at " + s0.toString());
// System.out.println(" at " + s0.toString());
if (t.getCause() == null) {
System.out.println("-------------------------------");
// System.out.println("Complete traceback (bottom to top):");
buf.append(getStackTraceString(t));
// t.printStackTrace();
}
t = t.getCause();
}
return buf.toString();
}
public static String getStackTraceString(Throwable t) {
StackTraceElement elements[] = t.getStackTrace();
StringBuffer buf = new StringBuffer();
for (int i = 0, n = elements.length; i < n; i++) {
buf.append(elements[i].toString());
System.err.println(elements[i].getFileName() + ":"
+ elements[i].getLineNumber()
+ ">> "
+ elements[i].getMethodName() + "()");
// System.out.println("*** getChianedExceptionMsg " + elements[i].toString());
}
return buf.toString();
}