令我惊讶的是,在以下程序中,Eclipse控制台在循环中不会打印。 它只打印:“开始:完成”。 当我使用println而不是它。 当我删除评论时它也会这样做。 惊喜:当我在控制台中复制“start:finish”行时,剪贴板确实包含所有打印的数字。 有兴趣知道这种行为的原因是什么?
public static void main(String[] args) {
System.out.print("start: ");
for (int i = 0; i < 10000; i++) {
// if (i > 1000 && i < 1010)
System.out.print(i + " ");
}
System.out.println("finish");
}
答案 0 :(得分:0)
用Java打印或打印(“\ n”)在C&amp; C ++刷新缓冲区并强制它打印缓冲区中的所有东西但是当使用print whitout时\ n(新行)它不一定是打印缓冲区
答案 1 :(得分:0)
嗯,那里有一条非常非常长的路线。因此,您很可能已超过Eclipse控制台可以可靠显示的最大行长度。内容可能已在那里打印出来(复制和粘贴时它出现在剪贴板中的事实证明了这一点),但效果不佳。
答案 2 :(得分:0)
确认行为。奇怪的是,必须与eclipse包装的输出流有关。 Eclipse 3.5由我。如果没有正确刷新()或者对于一条线太宽,内部缓冲可能会抛弃输出。
package tests;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
public class EclipsePrint {
public static void main(String[] args) {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
PrintStream out = System.out;
System.setOut(new PrintStream(new BufferedOutputStream(bout), true));
System.out.print("start: ");
for (int i = 0; i < 10000; i++) {
// if (i > 1000 && i < 1010)
System.out.print(i + " ");
}
System.out.println("finish");
out.println(bout.size());
out.println(bout.toString());
bout = new ByteArrayOutputStream();
System.setOut(new PrintStream(new BufferedOutputStream(bout), true));
System.out.print("start: ");
for (int i = 0; i < 1000; i++) {
// if (i > 1000 && i < 1010)
System.out.print(i + " ");
}
System.out.println("finish");
out.println(bout.size());
out.println(bout.toString());
}
}
在eclipse中Run/Debug:Console:console buffer size (characters)
处有一个控制台设置,允许您使用最多10 ^ 6个字符作为控制台缓冲区。你的第一个循环超过了它。
答案 3 :(得分:0)
在我的eclipse 3.4 / Mac OSx上试过它当上限为1000时打印得很好,但是对于10000,显示被截断了。
使用System.out.println而不是System.out.print;那是每一行,它对我来说效果很好10000。