問題

下面的程式列印每個標準字元,但只有在編寫換行之後(至少在我的系統上!).

 public class Test {
    public static void main(String[] args) throws java.io.IOException {
        int c;
        while ((c = System.in.read()) != -1)
            System.out.print((char) c);
    }
}
 

這使得人們不能寫諸如“Press any key to with”之類的東西,並強迫“Press inter”之類的東西繼續下去。

  • 這是什麼根本原因?
  • 它是Java的限制嗎?
  • 這種行為是否依賴系統(我在Ubuntu上)?它如何在Mac上工作?Windows?
  • 它是否依賴於我執行應用程式的特定終端? (對我來說,它在Eclipse和gnome-terminal中的行為是這樣的)
  • 有解決方法嗎?

  最佳答案

這是什麼根本原因?

大多數終端預設是緩衝行,Java在換行之前不會接收輸入.

它是Java的限制嗎?

一些古代終端可能只有線緩衝輸入;儘管大多數現代終端都可能禁用緩衝。

這種行為是否依賴系統(我在Ubuntu上)?它如何在Mac上工作?Windows?

是。

它是否依賴於我執行應用程式的特定終端? (對我來說,它在Eclipse和gnome-terminal中的行為是這樣的)

是。

有解決方法嗎?

Linux和類似Unix的平臺中有特定於平臺的hacks.curse,Windows中的getch().我不知道任何跨平臺方式.

相關:為什麼“出版任何關鍵要繼續”是壞主意:

alt text

  相同標籤的其他問題

javastdin