我正在編寫應該在Windows和Linux中運行的Java控制檯GUI。輸入到控制檯窗口中的字符只要輸入就應該進入該過程。我正在使用write()函數(長度爲1),然後是flush()。沒有沖洗它不會去處理,直到我按<Enter>
。該過程回顯字符,所以我應該在控制檯中看到它們。在Windows中一切正常,但在Linux中,顯然它爲每個flush()發送一個<CR>
。因爲該過程所做的第一件事是獲取密碼,所以在第一個字符後會得到錯誤的密碼(因爲是由<CR>
提交的)。在Linux中使用BufferedWriter.flush()發送回車
如果我跳過沖洗,它的工作原理,但直到下一個<Enter>
控制檯中鍵入的文本不可見。
任何人都可以幫助如何避免那些<CR>
s與flush()一起發送?
非常感謝!
代碼示例:
BufferedWriter writer;
......
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
switch(e.getID()) {
case KeyEvent.KEY_TYPED:
byte b;
b = (byte)e.getKeyChar();
try {
writer.write(b);
writer.flush();
} catch (IOException ex) {
}
break;
}
return true;
}
如果您檢查代碼,BufferedWriter.flush()在Linux和Windows上是相同的,並添加任何字符。當數據被刷新時,linux程序的輸入可能會有所不同,但問題不大可能出現在java端。 –