IntelliJ Idea调试/运行控制台; System.out.flush没有刷新

时间:2016-09-30 19:32:03

标签: java intellij-idea console flush

过去几天这一直困扰着我,因为它过去常常起作用。我升级了我的intellij,现在它不起作用。我不想回去,但我需要一个答案。

所以,我正在编写一个控制台应用程序,当它运行时,我想要显示进度的shell。它在运行时工作正常,但是当我在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();
    }
}

Spoiler,它是应用程序。我不知道发生了什么变化,但是如果没有在命令行上进行完整构建和运行,就很难调试显示问题。如果有人可以帮我弄清楚为什么这会改变和/或帮助我修复它所以它会正确冲洗,我会非常感激。

2 个答案:

答案 0 :(得分:5)

在2016.3.5版本上测试过,问题仍然存在。

该错误是由之后的所有字符&#34; \ r&#34;将在控制台中清除。

例如,使用字符串&#34; Test \ r&#34;将得到&#34;测试&#34;写入控制台后,光标由&#34; \ r&#34;向左移动,所有字符&#34;测试&#34;被清除了。所以你什么也看不见。

解决方法是移动&#34; \ r&#34;到字符串的开头。例如,&#34; \ rTest&#34;将在控制台中看到输出。

以下代码将说明错误。你会看到&#34; 0000&#34;和&#34; 111&#34;将出现1秒钟,然后全部由&#34; 22&#34;。

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

答案 1 :(得分:1)

在此issue未解决之前,请使用当前的解决方法 -Deditable.java.test.console=true(在idea.properties中指定)。