这几天一直困扰着我,因为它以前能用。我升级了我的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();
}
}
字符串
剧透,这是应用程序.我不知道有什么变化,但它使得它很难调试显示问题,而不做一个完整的构建和运行在命令行上.如果有人能帮我弄清楚为什么这改变和/或帮助我修复它,所以它会正常刷新,我会非常感激.
3条答案
按热度按时间6qqygrtg1#
在2016.3.5版本上测试,问题仍然存在。
该错误是由控制台中**“\r”之后的所有字符**引起的。
例如,使用字符串“Test\r”将得到“Test”写入控制台,当光标向左移动“\r”后,所有字符“Test”都被清除。所以你不会看到任何东西。
解决方法是将“\r”移动到字符串的开头。例如,“\rTest”将在控制台中看到输出。
下面的代码将说明这个错误。你会看到“0000”和“111”会出现1秒,然后都被“22”清除。
字符串
bsxbgnwa2#
在此issue未解决之前,当前的解决方法是使用
-Deditable.java.test.console=true
(在idea.properties
中指定它)。mu0hgdu03#
你可以尝试移动你的代码来运行main函数而不是junit的@Test函数。