Reputation: 2039
Have a look at this example:
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);
}
}
}
Why doesn't the JVM tell me somehow, that writing to stdout failed? I would expect to get an Exception somewhere.
How else could I detect such a situation?
Upvotes: 3
Views: 113
Reputation: 200148
Official specification says it all.
Unlike other output streams, a
PrintStream
never throws anIOException
; instead, exceptional situations merely set an internal flag that can be tested via thecheckError
method.
If your question is "why did they decide to do it this way", then all we can do is make educated guesses, but opinions are off-topic on this site.
Upvotes: 4