2016-09-30 5 views
2

Это прослушивало меня последние пару дней, потому что это работало. Я обновил свой интеллект, и теперь он не работает. Я не хочу возвращаться, но мне нужен ответ.IntelliJ Idea debug/run console; System.out.flush не смывается

Итак, я пишу консольное приложение, и пока он работает, я хочу, чтобы у вас был демонстрационный показ прогресса. Он работает нормально, когда он работает, но когда я отлаживаю IntelliJ Idea, System.out.flush() не будет скрываться на консоли, если буфер не содержит новую строку. Я написал следующий модульный тест, чтобы узнать, было ли это я или мое приложение.

@Test 
public void flushTest() { 
    int loops = 100; 
    for (int i = 0 ; i < 100 ; ++i) { 
     System.out.print("This is a print, does it flush : " + i + "\r"); 
     if (i %10 == 0) { 
      System.out.print("\n"); 
     } 
     System.out.flush(); 
    } 
} 

Спойлер, это приложение. Я не знаю, что изменилось, но очень сложно отладить проблемы отображения, не выполняя полную сборку и выполнение в командной строке. Если кто-то может помочь мне понять, почему это изменилось и/или помочь мне исправить это, так что он будет флеш правильно, я был бы очень благодарен.

+0

Я думаю, причина, по которой это происходит, объясняется в этом посте. http://stackoverflow.com/questions/7166328/when-why-to-call-system-out-flush-in-java. Однако на самом деле это не объясняет, как решить проблему. – Brion

+1

Нашел то же самое, когда я недавно обновился до версии 2016.3. Я не смог найти это как проблему на YouTrack, поэтому добавил его здесь https://youtrack.jetbrains.com/issue/IDEA-166108 – user6579871

ответ

3

Протестировано по версии 2016.3.5, проблема все еще существует.

Ошибка вызвана всеми символами после «\ r» будет удалена в консоли.

Например, с помощью строки «Test \ r» будет получен «Test», записанный на консоль, после перемещения курсора влево «\ r» все символы «Test» будут удалены. Значит, ты ничего не увидишь.

Обходным путем является перемещение «\ r» в начало строки. Например, «\ rTest» увидит вывод в консоли.

Следующие коды иллюстрируют ошибку. Вы увидите «0000» и «111» появится в течение 1 секунды, а затем все будут очищены «22».

System.out.print("0000\r"); 
Thread.sleep(1000); 
System.out.print("111\r"); 
Thread.sleep(1000); 
System.out.print("22\r"); 
0

До этого issue не решен, текущий обходной путь заключается в использовании -Deditable.java.test.console=true (указать в idea.properties).