我有以下代碼:Java異常堆棧跟蹤不打印
import org.apache.commons.lang.exception.ExceptionUtils;
public void myMethod() {
try {
// do something
} catch (Exception e) {
System.out.println(ExceptionUtils.getStackTrace(e)); // prints "java.lang.NullPointerException"
System.out.println(ExceptionUtils.getFullStackTrace(e)); // prints "java.lang.NullPointerException"
e.printStackTrace(); // prints "java.lang.NullPointerException"
}
}
,我想看到的輸出是一個完整的堆棧跟蹤行號和類失敗的層次結構。例如,
Exception in thread "main" java.lang.NullPointerException
at org.Test.myMethod(Test.java:674)
at org.TestRunner.anotherMethod(TestRunner.java:505)
at java.util.ArrayList(ArrayList.java:405)
這段代碼被一個更大的應用程序,它也有log4j的內部運行的,但我希望能夠得到的異常轉換成字符串,所以我可以把它作爲一個電子郵件到java開發人員。
沒有人有我如何能捕捉到完整的堆棧跟蹤到一個字符串的任何想法?我無法使用Thread.currentThread()。getStackTrace(),因爲此應用程序在Java 4上運行。可能是因爲打印完整堆棧跟蹤而阻止上述代碼?
看起來NPE中的StackTraceElement數組正在被重置爲空。是否有人在NPE上調用setStackTrace? –
@DanGravell - 不,不應該調用setStackTrace。 – David
你能夠在IDE中進行調試嗎?可能值得在catch塊中設置一個斷點,以查看Exception是否「完美形成」。 –