Windows下的Java控制台bug

时间:2011-12-02 09:11:05

标签: java eclipse console

以下代码

System.out.println("Start");
String s = "";
//936 * 5 = 4680 characters
for (int i = 0; i < 937; i++){
    s += "1234 ";
}
System.out.println(s);
System.out.println("End");

在Windows下的java控制台上的“开始”和“结束”之间产生一个空行,但在运行MacOS或Linux时可以正常工作。写入文件而不是使用sysout时也是如此。我试过多台Windows机器。无论我是通过eclipse还是通过cmd执行该方法都无关紧要。

当您将“1234”更改为“1234”或“12g4”时或当运行次数多于/少于936时,它将按预期在所有操作系统中运行。

任何人都可以确认/这个问题是否存在已知错误?

1 个答案:

答案 0 :(得分:8)

我也可以在Windows 7下重现这一点。由于SWT中的操作系统,它看起来像是一个限制,它似乎已经存在了很长时间(2002)。它被标记为WONTFIX。见GC#drawString, drawText don't render more than 10923 characters per line correctly。所以这是一个已知的错误。

解决方法是转到Workspace-&gt; Preferences-&gt; Run / Debug-&gt;控制台并将固定宽度控制台设置为4000个字符。这会将你的行包裹在4000个字符之后,这很痛苦,但至少你会获得所有的输出。

我曾尝试过Galileo(3.5),Helios(3.6)和Indigo(3.7),并且都表现出了这种行为,但是很明显,Galileo&amp; OP表示,Helios有一个限制= 818(4090个字符)和Indigo = 936(4680)个字符。 4090让我想到操作系统限制(下一个将是4090 + 5 + crlf,> 4096),它与Eclipse / SWT中引发的错误相匹配。我无法解释为什么接受的字符数有所不同。我只能建议它是操作系统中的东西。

Eclipse中出现了许多重复的错误:

  1. Bug 19850 - Large string printed in Console overstrikes/disappears depending on length
  2. Bug 44866 - Truncate long strings in variables view
  3. Bug 104588 - Unreadable console output under certain conditions
  4. 一切似乎都是:Bug 11601 - console hangs while displaying long strings without crlf

    的结果