gpt4 book ai didi

java - try-catch block java 9 中的 Stackwalker

转载 作者:行者123 更新时间:2023-11-30 05:26:51 26 4
gpt4 key购买 nike

我正在尝试在异常 block 中打印堆栈遍历器,但它仅显示当前类

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文档:

The walk method opens a sequential stream of StackFrames for the current thread and then applies the given function to walk the StackFrame stream.

由于您是从主方法调用它 - 只分配了一个 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 block java 9 中的 Stackwalker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58380018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com