我用Java編寫一個簡單的聊天應用程序,一切工作正常,除了以下奇怪的錯誤:BufferedReader是否阻止標準控制檯輸入?
當您在終端的東西,比如你按下「A」和控制檯寫道:「一個」,然後你按下「i」,它會寫「i」,「r」 - >「r」...,然後你就會得到在控制檯中寫的單詞(例如「空氣」)。在我的情況下,我按下「e」,控制檯寫入「(無)」,「我」 - >「(注意)」,「r」 - >(無),只有按下「進入」控制檯後突然顯示整個單詞「空氣」,以同樣的方式使用多個單詞。事實上,用戶可以寫任何他/她想要的內容,但只有在按下Enter之後,輸入的文本纔會出現。
在我的節目我用BufferedReader
對象從套接字閱讀:
try(....some socket stuff....
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true);//out is the socket output
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); //in is the socket input
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); //that's the standard input, the one from keyboard
while(true){
if (stdIn.ready()){
userInput=stdIn.readLine();
out.println(userInput);
if(userInput.equals("Bye.")) break;
System.out.println("Me: "+userInput);
}
if(in.ready()){
if((serverInput= in.readLine())!=null){
System.out.println("Stranger: "+serverInput);
}
}
在我看來這方法 - ready
和readline()
- 可能錯誤控制檯。這對我來說似乎有點奇怪,但它是Java,我不是很熟練。
除此之外,聊天工作就像魅力 - 它正確地發送和接收。 read-receive-input腳本與客戶端完全相同。當你輸入一條消息時,控制檯中沒有任何東西會顯示出來,但它實際上在那裏,並且在Enter上顯示,這不是延遲,它受Enter的影響。
你打電話給你的應用程序?我嘗試了一段類似的代碼,它適用於我,我猜你的環境是抑制來自終端的輸入,並且它輸入的原因是因爲'out.println(userInput);'行 – ecarlos
#ecarlos 我用java ServerSide和java ClientSide 初始化程序,然後它只是工作...服務器有它的Serversocket和一個普通的套接字使用.accept()方法。在你打字的時候,沒有什麼特別的,你只是看不到你打字的內容,這是令人討厭的部分。你能建議什麼可以「抑制」來自終端的輸入嗎? –
KDX2
你以某種方式將控制檯變爲無回聲模式。它與'BufferedReader'沒有任何關係。 – EJP