繁体   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