这是我的问题,有一个服务器和一个客户端类通过2个线程进行通信(MsgWriter和MsgReader)
要读取输入并将其写入流中,我使用扫描仪。 它可以工作,但扫描仪需要两次输入才能继续。
例如: 我写了一条消息 您的留言:文字。
所以我想在点击“输入”后立即发送消息 但是我必须再次输入以发送文本。
对不起,我解释得非常糟糕。但是这里是MsgWriter线程的代码
public class MsgWriter extends Thread {
private Socket s;
private Buffer buffer = new Buffer();
public MsgWriter(Socket s) {
this.s = s;
}
public void run() {
String message = "";
BufferedReader br = null;
boolean end = false;
while(!end){
try{
synchronized (buffer) {
while (!buffer.isEmpty()) {
buffer.wait();
}
//buffer.put(s);
OutputStream out = s.getOutputStream();
PrintStream writer = new PrintStream(out);
Scanner input = new Scanner(System.in);
input.useDelimiter("\n");
if (input.nextLine().equals("")){
System.out.println("Your message: ");
message = input.next();
br = new BufferedReader(new StringReader(message));
if (input.hasNext("x")) {
br = new BufferedReader(new StringReader("Good Bye"));
end = true;
}
message = br.readLine();
writer.println(message);
System.out.println("-------------------------------");
}
buffer.notifyAll();
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
}
输出
ServerIP:localhost / 127.0.0.1 端口号:56763 ++连接到服务器
你的留言: 嗨服务器
收到:客户
如果您需要MsgReader线程的代码,请告诉我。
答案 0 :(得分:0)
你有这一行if (input.nextLine().equals(""))
寻找空字符串输入,这就是你的代码等待第二次'Enter'按下的原因。您在代码中需要这个的具体原因是什么?