关闭stdout之后:Java默默地吞下写入stdout的所有内容

时间:2016-10-27 11:44:55

标签: java stdout

看一下这个例子:

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {

  public static void main(String[] args) {
    System.out.println("hi there!");
    System.out.close();
    System.out.println("I'm silently swallowed :(");
    System.out.flush(); // even flushing and closing again
    System.out.close(); // doesn't throw an Exception
    try {
      FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
      fos.flush(); // same goes for this more direct approach
      fos.close();
    } catch (IOException e) {
      e.printStackTrace(System.err);
    }
  }
}

为什么JVM不能告诉我,写入stdout失败了?我希望得到一个例外某处

我怎么能发现这种情况?

1 个答案:

答案 0 :(得分:4)

Official specification说明了一切。

  

与其他输出流不同,PrintStream永远不会抛出IOException;相反,特殊情况只是设置了一个内部标志,可以通过checkError方法进行测试。

如果你的问题是"为什么他们决定这样做?#34;那么我们所能做的就是做出有根据的猜测,但是这个网站上的意见是偏离主题的。