Ошибка консоли Java под Windows - PullRequest
6 голосов
/ 02 декабря 2011

следующий код

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");

создает пустую строку между «Start» и «End» на консоли java под windows, но работает должным образом при работе MacOS или Linux. То же самое относится и к записи в файл вместо использования sysout. Я пробовал несколько машин Windows. Не имеет значения, выполняю ли я метод через eclipse или через cmd.

Когда вы изменяете «1234» на «1234» или «12g4» или когда число запусков больше / меньше 936, это работает, как ожидается, со всеми ОС.

Кто-нибудь может подтвердить это / есть известная ошибка по этой проблеме?

1 Ответ

8 голосов
/ 02 декабря 2011

Я могу воспроизвести это также под Windows 7. Это похоже на ограничение из-за ОС в SWT, и, кажется, оно существует очень давно (2002). Это помечено как WONTFIX. См. GC # drawString, drawText отображает не более 10923 символов в строке правильно . Так что это известная ошибка.

Обходной путь - перейти в рабочую область-> Настройки-> Выполнить / Отладка-> Консоль и установить консоль фиксированной ширины примерно на 4000 символов. Это перенесет ваши строки после 4000 символов, что является болью, но, по крайней мере, вы получите весь свой вывод.

Я пробовал Galileo (3.5), Helios (3.6) и Indigo (3.7), и все они демонстрируют поведение, но странно, Galileo & Helios имеют предел = 818 (4090 символов) и Indigo = 936 (4680) символов как сказал ОП. 4090 заставляет меня думать об ограничении ОС (следующим будет 4090 + 5 + crlf,> 4096), что соответствует ошибкам, поднятым в Eclipse / SWT. Я не могу объяснить, почему существует разница в количестве принятых символов. Я могу только предположить, что это что-то в ОС.

В Eclipse появилось несколько повторяющихся ошибок:

  1. Ошибка 19850 - Большая строка, напечатанная в консоли, перезагружается / исчезает в зависимости от длины
  2. Ошибка 44866 - усечение длинных строк в представлении переменных
  3. Ошибка 104588 - Нечитаемый вывод консоли при определенных условиях

Все, кажется, было следствием: Ошибка 11601 - консоль зависает при отображении длинных строк без crlf

...