Java 在BufferedReader上使用readLine()方法会导致挂起吗?
每当我试图在我的BufferedReader上使用.ready()或.readLine()时,它只会使我的程序挂起 我尝试使用.ready()而不是.readLine() 注释掉任何套接字将关闭 围着尝试和抓住Java 在BufferedReader上使用readLine()方法会导致挂起吗?,java,Java,每当我试图在我的BufferedReader上使用.ready()或.readLine()时,它只会使我的程序挂起 我尝试使用.ready()而不是.readLine() 注释掉任何套接字将关闭 围着尝试和抓住 private void connectButtonActionPerformed(ActionEvent e){ try { Socket mySocket = new Socket(jServerAddressField.getText(),
private void connectButtonActionPerformed(ActionEvent e){
try {
Socket mySocket = new Socket(jServerAddressField.getText(),
Integer.parseInt(jPortField.getText()));
if (jConnectButton.getText() == "Connect") {
jChatBox.append("Connected to Server\n");
jConnectButton.setText("Disconnect");
} else if (jConnectButton.getText() == "Disconnect") {
mySocket.close();
jChatBox.append("Disconnected from server: " + jServerAddressField.getText() + ": " + jPortField.getText() + "\n");
jConnectButton.setText("Connect");
} else
jChatBox.append("Unknown error");
} catch (IOException evt) {
jChatBox.append("Could not connect to Server\n");
}
}
private void sendButtonActionPerformed(ActionEvent e){
Socket mySocket = null;
PrintWriter out = null;
BufferedReader in = null;
String fromServer;
try {
mySocket = new Socket(jServerAddressField.getText(),
Integer.parseInt(jPortField.getText()));
out = new PrintWriter(mySocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
mySocket.getInputStream()));
} catch (UnknownHostException evt) {
System.err.println("Don't know about host: " + jServerAddressField);
System.exit(1);
} catch (IOException evt) {
System.err.println("Couldn't get I/O for the connection to: " + jServerAddressField);
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
try {
System.out.println(mySocket);
System.out.println(mySocket.getOutputStream());
System.out.println(in);
System.out.println(stdIn);
while ((fromServer = in.readLine()) != null) {
System.out.println("Server: " + fromServer);
if (fromServer.equals("Bye."))
break;
fromUser = stdIn.readLine();
if (fromUser != null) {
System.out.println("Client: " + fromUser);
out.println(fromUser);
}
}
out.close();
in.close();
stdIn.close();
mySocket.close();
} catch (IOException ev) {
System.out.println("bad");
}
}
用另一种方法
jSendButton.addActionListener(this::sendButtonActionPerformed);
我把打印语句放进去看看打印的是什么
System.out.println(mySocket);
System.out.println(mySocket.getOutputStream());
System.out.println(in);
System.out.println(stdIn);
分别打印出来
Socket[addr=constance.cs.rutgers.edu/128.6.25.89,port=5520,localport=64759]
java.net.SocketOutputStream@38c0ccc7
java.io.BufferedReader@cabb724
java.io.BufferedReader@25204e41
例外情况是极其重要的信息。不要把它们藏起来。始终打印或记录捕获的异常的完整堆栈跟踪,除非您计划将其作为另一个异常的原因。意思是,添加
evt.printStackTrace()编码>到每个捕捉
块。在没有看到堆栈跟踪的情况下,您不得不猜测出哪里出了问题。@vgr谢谢您的提示,我只是一个程序员新手。虽然当我运行这个程序时,它没有输入任何捕获。将字符串与=
进行比较最终会失败。请参阅.Doesin.readLine()
hang,或者stdIn.readLine()
hang?@vgr它在.readLine()中挂起以了解while循环条件。它甚至从来没有进入循环。如果我只是键入'in.readLine()',它将挂起。在它到达.readLine()之前,一切都正常运行