2017-05-09 2 views
0

dangerousMethodHandler()는 잘못된 인수 예외가 catch 될 때 StackTraceElement 배열에서 오류의 스택 추적을 인쇄합니다. 다른 유형의 예외의 경우 dangerousMethodHandler()가 "Exception!"을 인쇄합니다.스택 추적 요소 예외 인쇄

나는 현재 다른 예외를 정리했지만 나는 인쇄 할 때 내가

java.lang.Character.toChars(Character.java:4982) 

내 출력해야 얻을 다음 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!"); 
     } 

    } 

를 사용하여 내 코드를 구현하는 수없는 것 be :

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

왜'printStackTrace (System.err)'를 사용하지 않으시겠습니까? – Killjoy1221

+0

Main.java:11을 시도하면이 오류가 발생합니다. 기호 을 찾을 수 없습니다. printStackTrace (java.io.PrintStream) 메서드 위치 : 클래스 Main printStackTrace (System.err); –

+0

내가 간다면 e.printStackTrace (System.err); 나는이 오류를 매우 가깝게 얻는다. java.lang.IllegalArgumentException \ x09at java.lang.Character.toChars (문자 .java : 4982) \ x09at Main.dangerousMethod (Main.java:18) \ x09at Main.dangerousMethodHandler Main.ain (Main.java:5) \ x09at Main.runTests (Main.java:26) \ x09at Main.main (Main.java:22) –

답변

1

배열에서 첫 번째 StackTraceElement 만 인쇄합니다. 당신은 그것을 반복하고 각각을 인쇄하기를 원할 것입니다.

for (StackTraceElement elem : trace) { 
    System.err.println(elem); 
} 
+0

백 슬래시 및 개행 문자로 어떻게 인쇄합니까? –

+0

출력이 정규식이라고 생각했습니다. – Killjoy1221

2

봅니다 아래에해야 할 일 : Arrays.stream(e.getStackTrace()).skip(0).map(StackTraceElement::toString).reduce((s1, s2) -> s1 + "\n" + s2).get()

에서 당신이 당신의 문자열을 구성하는 방법을 정의 할 수 있습니다 줄일 수 있습니다. 어쩌면 그것은 당신을 도울 것입니다.