打印堆栈跟踪元素异常

M.J*_*nes 3 java exception stack-trace

当捕获非法参数异常时,dangerousMethodHandler() 会从 StackTraceElement 数组打印错误的堆栈跟踪。对于任何其他类型的异常,dangerousMethodHandler() 会打印“Exception!”

我目前已经解决了其他异常,但似乎无法使用 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!");
        }

    }
Run Code Online (Sandbox Code Playgroud)

当我打印出以下内容时我得到

java.lang.Character.toChars(Character.java:4982)
Run Code Online (Sandbox Code Playgroud)

我的输出应该是:

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+\)
Run Code Online (Sandbox Code Playgroud)

kil*_*joy 5

您只打印数组中的第一个 StackTraceElement。您需要迭代并打印每个内容。

for (StackTraceElement elem : trace) {
    System.err.println(elem);
}
Run Code Online (Sandbox Code Playgroud)