当捕获到非法参数异常时,dangerousMethodHandler()从StackTraceElement数组打印错误的堆栈跟踪。对于任何其他类型的异常,dangerousMethodHandler()打印“异常!”
我目前已经解决了另一个异常,但似乎无法使用StackTraceElemen数组实现我的代码
public void dangerousMethod() {
Character.toChars(~0);
}
public void dangerousMethodHandler() {
try {
this.dangerousMethod();
}catch(IllegalArgumentException e){
StackTraceElement[] trace = e.getStackTrace();
e.getStackTrace();
System.err.println(trace[0].toString());
} catch (Exception e){
System.out.print("Exception!");
}
}
当我打印出以下内容时,我得到了
java.lang.Character.toChars(Character.java:4982)
我的输出应该是:
java\.lang\.Character\.toChars\(Character\.java:\d+\)[\s\n]+Main\.dangerousMethod\(Main\.java:\d+\)[\s\n]+Main\.dangerousMethodHandler\(Main\.java:\d+\)[\s\n]+Main\.runTests\(Main\.java:\d+\)[\s\n]+Main\.main\(Main\.java:\d+\)
答案 0 :(得分:3)
尝试以下操作:
Arrays.stream(e.getStackTrace()).skip(0).map(StackTraceElement::toString).reduce((s1, s2) -> s1 + "\n" + s2).get()
在reduce中,您可以定义如何构造字符串。也许它会对你有帮助。
答案 1 :(得分:2)
您只是从阵列中打印第一个StackTraceElement。你需要遍历它并打印每一个。
for (StackTraceElement elem : trace) {
System.err.println(elem);
}