這聽起來很像輸出沒有被刷新,因爲它只有System.out.print
有麻煩。
通常,System.out
和System.err
配置不同。 (System.err
通常不會被緩衝,並且通常會緩衝System.out
。)但是,javadoc並未指定任何流的清空行爲。這可以解釋(實際)控制檯和在IDE中運行之間的行爲差異。
有關的信息,這裏是流如何在Java 8初始化:
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
setIn0(new BufferedInputStream(fdIn));
setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));
setErr0(newPrintStream(fdErr, props.getProperty("sun.stderr.encoding")));
private static PrintStream ewPrintStream(FileOutputStream fos, String enc) {
if (enc != null) {
try {
return new PrintStream(new BufferedOutputStream(fos, 128),
true, enc);
} catch (UnsupportedEncodingException uee) {}
}
return new PrintStream(new BufferedOutputStream(fos, 128), true);
}
正如你可以看到與啓用自動沖洗緩衝,System.out
被初始化。
但是,打印語句後加入System.out.flush()
不會導致它來打印。
您確定嗎? A flush()
應該刷新任何緩衝輸出。
我認爲問題實際上是在別的地方;例如由於某種原因,print
或flush
調用不會發生。
它也有可能是一些你們的問題是由於這樣的:
System.out.print(",\\" + '\n');
由於@javaguy指出,一個換行符是特定於平臺的行分隔符。在某些平臺上,控制檯需要不同的東西。最簡單的平臺獨立的方式來告訴控制檯做一個換行符是:
System.out.println(",\\");
或者把他們放在一起:
System.out.println(",\\");
System.out.print(" " + someString);
System.out.flush(); // This is necessary ... and should work.
我真的不知道問題是什麼,但'System.out'沒有指明它是自動沖水的行爲;所以這取決於實施。顯然,在你的特定設置中,IntelliJ's和JAVA_HOME設置爲(猜測使用情況)的不同。 – user2478398
可能是這種情況。我在Windows和Linux計算機上都嘗試過它,它們都具有相同版本的JDK。 – sudom82
@ Sudom82您是否嘗試在我的回答中添加'\ r \ n'? – developer