2014-06-17 14 views
1

我想從「如何在Java 9th編程」中運行示例。這個關於異常處理的例子,以及如何使用它。每次運行我的程序時,我都會得到不同的輸出結果。爲什麼?!我正在使用NetBeans IDE。的代碼是:Javae異常處理輸出錯誤

public class StackUnwinding { 
    public static void main(String[] args){ 
     try{ 
      method1(); 
     }catch(Exception exception){ 
      System.err.printf("%s\n\n", exception.getMessage()); 
      exception.printStackTrace(); 

      StackTraceElement[] traceElement = exception.getStackTrace(); 

      System.out.println("\nStack trace from getStackTrace:"); 
      System.out.println("Class\t\tFile\t\tLine\t\tMethod"); 

      for(StackTraceElement element : traceElement){ 
       System.out.printf("%s\t", element.getClass()); 
       System.out.printf("%s\t", element.getFileName()); 
       System.out.printf("%s\t", element.getLineNumber()); 
       System.out.printf("%s\t", element.getMethodName()); 
      } 
     } 
    } 

    public static void method1() throws Exception{ 
     method2(); 
    } 

    public static void method2() throws Exception{ 
     method3(); 
    } 

    public static void method3() throws Exception{ 
     throw new Exception("Exceptions thrown in method3"); 
    } 
} 
+0

請問您是否可以詳細說明「每次運行我的程序時,我都得到了不同的輸出」?也許通過發佈輸出? – John

+0

我試圖添加輸出,但格式問題。 –

回答

2

輸出可以有時System.err誤差流和System.out輸出流之間由於流的緩衝和時間處的流沖洗交織。如果您只在代碼中使用錯誤流進行打印,則輸出將始終相同。

如果您只使用System.out,您仍可能得到不同的結果,因爲printStackTrace()在內部使用錯誤流。

+0

你好,謝謝你試圖幫助我。我已將所有流更改爲System.out,但我得到了相同的結果。 –

+0

printStackTrace()在內部使用System.err。發佈更新。 – manouti

+0

好吧,現在我明白了。非常感謝你。 –