2016-09-30 112 views
2

這在過去的幾天裏一直在困擾着我,因爲它曾經工作過。我升級了我的intellij,現在它不起作用。我不想回去,但我需要一個答案。IntelliJ Idea調試/運行控制檯; System.out.flush not flushing

所以,我正在編寫一個控制檯應用程序,並在運行時,我想要一個shell'd顯示進度。它在運行時工作正常,但是當我在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」將得到「測試」寫入控制檯,光標向左移動「\ 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指定它)。

相關問題