我正在尝试在异常块中打印堆栈行者,但它仅显示当前类
public class Test1 {
public void test() throws Exception{
Test2 test2 = new Test2();
test2.test();
}
}
public class Test2 {
public void test() throws Exception{
System.out.println(1/0);
}
}
public class TestStackWalker {
public static void main(String[] args) {
Test1 test1 = new Test1();
try {
test1.test();
} catch (Exception e) {
StackWalker stack = StackWalker.getInstance();
stack.forEach(System.out::println);
}
}
}
最佳答案
从StackWalker
文档:
walk方法为当前线程打开一个StackFrames
顺序流,然后应用给定的函数对StackFrame
流进行遍历。
由于您是从主方法调用它的,因此仅分配了一个StackFrame
并正在打印它:
TestStackWalker.main(TestStackWalker.java:10)
如果要访问异常的堆栈跟踪的每个堆栈元素,请使用
Throwable::getStackTrace
,它返回StackTraceElement
的数组:class TestStackWalker {
public static void main(String[] args) {
Test1 test1 = new Test1();
try {
test1.test();
} catch (Exception e) {
Arrays.stream(e.getStackTrace()).forEach(System.out::println);
}
}
}
将打印:
Test2.test(Test2.java:3)
Test1.test(Test1.java:4)
TestStackWalker.main(TestStackWalker.java:7)
如果只想打印,则
Throwable::printStackTrace
就足够了。关于java - try catch 块Java 9中的Stackwalker,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58380018/