2013-10-28 85 views
5

我在Eclipse中輸入了簡單的算術程序。在Eclipse中運行程序時,每次運行時,輸出都會以奇怪的順序顯示。有時候最後的打印語句最先出現的異常(這是正確的方式)。有時它會以混亂的順序反過來。爲什麼會發生&如何糾正它?每次執行時是否有任何設置使其以正確的方式打印。下面的屏幕截圖顯示了它的顯示方式。請幫我解決這個問題。Eclipse中的控制檯打印訂單

正確順序: Correct Order when run

順序不正確,當我們跑幾次後 Incorrect Order

package com; 

    public class Abc { 

     /** 
     * @param args 
     */ 
     public static void main(String[] args) { 

      System.out.println("begin main"); 
      // TODO Auto-generated method stub 
      int a = 10; 
      int b = 0; 
      int c = 0; 


      System.out.println("value of a BD is " + a); 
      System.out.println("value of b BD is " + b); 
      System.out.println("value of c BD is " + c); 

      c = a/b; //Arthmetic Exception 

      System.out.println("value of a AD is " + a); 
      System.out.println("value of b AD is " + b); 
      System.out.println("value of c AD is " + c); 



     } 

    } 

回答

5

詳細一點:從您的打印語句的輸出將會System.out。但是,異常消息將發送到System.err(請參閱this)。這兩個是獨立的輸出流,它們都發生在同一個地方:您的控制檯。它們被緩衝和獨立處理。在第二種情況下,print語句正在緩衝,但在發生異常時尚未打印。

編輯這裏還有一個複雜的問題,那就是Eclipse控制檯不是真正的Windows控制檯。如其他地方提到的here,過去在Windows平臺上的Eclipse控制檯存在問題,因爲Windows並未給Eclipse提供一種使它的控制檯像本地控制檯一樣運行的好方法。如果您添加flush調用並仍然有問題,請嘗試從命令提示符運行程序,看看是否有所作爲。

+0

附註,不涉及答案:如果你想添加形式'[描述](鏈接)''的鏈接,那麼不要忘記協議如'http:/ /'在鏈接。或者更好的是使用'Ctrl + L'選項。這會將'http://'部分添加到您的鏈接中,並使您的答案稍後更易於編輯。 – Pshemo

10

兩個不同的流被用在這裏。您正在使用System.out.,例外情況是使用System.err打印的。他們被緩衝,所以他們的輸出可能會打印在另一個之前。

,您可以例外線之前調用System.out.flush();:更多

System.out.flush(); 
c = a/b; //Arthmetic Exception 
+1

+1。另一種方法是將錯誤流設置爲輸出流,如'System.setErr(System.out);'這種方式只需要一個流就可以使用控制檯。 – Pshemo

+0

不幸的是,這並不能可靠地解決這個問題... –