簡體   English   中英

為什么在System.out.println之前打印System.err.println?

[英]Why is System.err.println is printed before then System.out.println?

我是從wiki責任鏈文章中試用Logger的例子。 在它打印的想法中運行示例:

Sending to stderr: An error has occurred.
Writing to stdout: Entering function y.
Writing to stdout: Step1 completed.
Sending via email: Step1 completed.
Writing to stdout: An error has occurred.
Sending via email: An error has occurred.

但是當我在stderrs中寫一個斷點時寫了一個

class StderrLogger extends Logger {
    public StderrLogger(int mask) {
        this.mask = mask;
    }

    protected void writeMessage(String msg) {
        System.err.println("Sending to stderr: " + msg);//break out here
    }
}

它打印除了std err之外的所有messag,這里沒有涉及的線程,那么為什么它在運行情況下的第一行打印stderr?

System.err與Eclipse中的System.out不同地刷新。

在Eclipse中試試這個:

public class Derp {
    public static void main(String[] args) {
        for(int i = 0; i < 10; i++) {
            System.out.println("OUT");
            System.err.println("ERR");
        }
    }
}

這將以大塊的形式隨機打印出大部分OUT和大部分ERR 然而,正如Evgeniy Dorofeev所指出的,這是一個Eclipse問題,而不是Java問題。

如果在終端中運行此示例程序,您將注意到正確的輸出,無需任何刷新。

更新:感謝Evgeniy Dorofeev指出這一點! 刷新不起作用是一個Eclipse問題!

System.out.println - >將輸出發送到標准輸出流。 一般監控。

System.err.println - >將輸出發送到標准錯誤流。 一般監控。

outerr是獨立的。

要獲得所需的輸出,您必須刷新流或只使用一個流進行所有輸出。

你可以使用System.out.flush(); System.err.flush(); 在你的代碼中

如果您從Eclipse打印它,這是一個已知的錯誤https://bugs.eclipse.org/bugs/show_bug.cgi?id=32205

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM