【发布时间】:2016-01-28 20:44:47
【问题描述】:
我正在用 Java 编写一个简单的聊天应用程序,一切正常,除了以下奇怪的错误:
当你在终端输入一些东西时,例如你按“a”,控制台写“a”,然后你按“i”,它写“i”,“r”->“r”...并且您会在控制台中看到单词(例如“air”)。
在我的情况下,我按“e”,控制台写“(无)”,“i”->“(注意)”,“r”->(无),只有在我突然按“输入”控制台后显示整个单词“air”,以相同的方式与多个单词一起使用。实际上,用户可以写任何他/她想要的内容,但是只有在按下 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 的影响。
【问题讨论】:
-
您如何调用应用程序?我尝试了一段类似的代码,它对我有用,我猜你的环境正在抑制来自终端的输入,它在 enter 上打印的原因是因为
out.println(userInput);行 -
#ecarlos 我用 java ServerSide
和 java ClientSide 初始化程序然后它就可以工作了......服务器有它的 Serversocket 和一个普通的 socket 使用 .accept( ) 方法。没什么特别的,你只是在输入的时候看不到你在输入什么,这是令人讨厌的部分。你能建议什么可能“抑制”来自终端的输入吗? -
你不知何故让控制台进入无回显模式。和
BufferedReader没有任何关系。
标签: java sockets bufferedreader