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

o2gm4chl  于 2024-01-06  发布在  IntelliJ IDEA
关注(0)|答案(3)|浏览(224)

这几天一直困扰着我,因为它以前能用。我升级了我的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();
    }
}

字符串
剧透,这是应用程序.我不知道有什么变化,但它使得它很难调试显示问题,而不做一个完整的构建和运行在命令行上.如果有人能帮我弄清楚为什么这改变和/或帮助我修复它,所以它会正常刷新,我会非常感激.

6qqygrtg

6qqygrtg1#

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

字符串

bsxbgnwa

bsxbgnwa2#

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

mu0hgdu0

mu0hgdu03#

你可以尝试移动你的代码来运行main函数而不是junit的@Test函数。

相关问题