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中,debug视图列出了所有进程,这些进程都是线程所在的)
    • 如果线程存在:挂起它(在eclipse中,通过单击线程并按下暂停图标)。调试器现在将显示该线程的堆栈,以便您可以检查它正在执行的操作
    • 如果线程不再存在,它必须正常终止或突然终止(由于未处理的异常)。可以通过在run()中的最后一条语句上设置断点来区分这一点。如果它突然完成,则必须调用线程的未捕获异常处理程序
  • This method will block until a character is available,
    an I/O error occurs, or the end of the stream is reached.