Java 线程突然停止,没有异常或错误消息
我有一个线程可以读写网络套接字Java 线程突然停止,没有异常或错误消息,java,multithreading,network-programming,Java,Multithreading,Network Programming,我有一个线程可以读写网络套接字 public void run() { try { Socket socket = new Socket("10.0.1.11", 19456); out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); in = new BufferedReader(new InputStreamReader(socket.get
public void run() {
try {
Socket socket = new Socket("10.0.1.11", 19456);
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = "13" + seperator + "0" + seperator + "userdata";
out.write(message);
out.flush();
while (listen) {
String input = "";
for (int letter = in.read(); letter != -1; letter = in.read()) {
System.out.println((char)letter);
input += (char)letter;
}
System.out.println(input);
displayText(input);
}
socket.close();
} catch (UnknownHostException e) {
displayText("Could not connect to server!");
} catch (IOException e) {
displayText("Could not open IO to server!");
}
}
但是,for循环之后的所有内容都不会执行。for循环中的System.out.println打印出它应该打印的所有字母,但是for循环之后的System.out.println和displayText函数永远不会执行(使用断点检查)。。。我错过了什么根据
他们的代码示例显示,它们-1在EOF上返回
因此,for循环被阻塞是因为.read()中的无法识别EOF条件
在socket服务器关闭其发送方向(即关闭客户端的接收端)之前,它无法做到这一点
- 如果线程存在:挂起它(在eclipse中,通过单击线程并按下暂停图标)。调试器现在将显示该线程的堆栈,以便您可以检查它正在执行的操作
- 如果线程不再存在,它必须正常终止或突然终止(由于未处理的异常)。可以通过在run()中的最后一条语句上设置断点来区分这一点。如果它突然完成,则必须调用线程的未捕获异常处理程序
This method will block until a character is available,
an I/O error occurs, or the end of the stream is reached.