2013-09-26 72 views
1

我正在編寫應該在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; 
     } 
+0

如果您檢查代碼,BufferedWriter.flush()在Linux和Windows上是相同的,並添加任何字符。當數據被刷新時,linux程序的輸入可能會有所不同,但問題不大可能出現在java端。 –

回答

1

你逐行讀取輸入?你可以給我們代碼,你在哪裏做flush()和你在做什麼之前?從你已經解釋的方式來看,就好像flush()在flush()不會推入任何不在緩衝區中的東西時推送到流。所以,我可能會在你開始沖洗它之前檢查是否進來。

+0

我在原始文章中添加了代碼示例 –

+0

我看不到任何代碼明顯錯誤。幾個指針:你可以在Windows和Linux中記錄AWT事件嗎?或者查看KEY_TYPED事件觸發了多少次?另外,如果可能的話,您是否可以將它們寫入文件並查看您是否仍然看到?我開着車:單個字節不能同時輸入鍵和。 – prabugp