Windows下的Java控制台bug

以下代码

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时,它将按预期在所有操作系统中运行。

任何人都可以确认这个/有关于这个问题的已知错误吗?

我也可以在Windows 7下重现这一点。由于SWT中的OS,它看起来像是一个限制,它似乎已经存在了很长时间(2002)。 它被标记为WONTFIX。 请参阅GC#drawString,drawText不能正确地每行渲染超过10923个字符 。 所以这是一个已知的错误。

解决方法是转到工作区 – >首选项 – >运行/调试 – >控制台,并将固定宽度控制台设置为4000个字符。 这将在4000个字符后包裹你的行,这是一个痛苦,但至少你会得到你的所有输出。

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

Eclipse中引发了许多重复的错误:

  1. 错误19850 – 在控制台重叠打印的大字符串/根据长度消失
  2. 错误44866 – 在变量视图中截断长字符串
  3. 错误104588 – 在某些条件下无法读取控制台输出

一切似乎都是由于: Bug 11601 – 控制台在显示没有crlf的长字符串时挂起