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

问题描述 投票:0回答:3

这几天一直困扰着我,因为它曾经有效。我升级了我的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();
    }
}

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

java intellij-idea console flush
3个回答
5
投票

在2016.3.5版本测试,问题依旧。

该错误是由after所有字符引起的” " 将在控制台中被清除。

例如,使用字符串“Test ” 将光标移动到左侧后,将“Test”写入控制台 ”,所有“Test”字符都被清除。所以你不会看到任何东西。

解决方法是移动“ " 到字符串的开头。例如," Test”将在控制台中看到输出。

以下代码将说明该错误。你会看到“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");

2
投票

直到这个问题尚未解决,当前的解决方法是使用

-Deditable.java.test.console=true
(在
idea.properties
中指定)。


0
投票

您可以尝试移动代码来运行 main 函数,而不是 junit 的 @Test 函数。我也遇到了这个问题,我把它移到了 main 函数下,它成功了

© www.soinside.com 2019 - 2024. All rights reserved.