在循环中使用System.out.print进行调试(Eclipse)

时间:2009-07-19 14:09:18

标签: java

令我惊讶的是,在以下程序中,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");
    }

4 个答案:

答案 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。