Java 在BufferedReader上使用readLine()方法会导致挂起吗?

Java 在BufferedReader上使用readLine()方法会导致挂起吗?,java,Java,每当我试图在我的BufferedReader上使用.ready()或.readLine()时,它只会使我的程序挂起 我尝试使用.ready()而不是.readLine() 注释掉任何套接字将关闭 围着尝试和抓住 private void connectButtonActionPerformed(ActionEvent e){ try { Socket mySocket = new Socket(jServerAddressField.getText(),

每当我试图在我的BufferedReader上使用.ready()或.readLine()时,它只会使我的程序挂起

我尝试使用.ready()而不是.readLine() 注释掉任何套接字将关闭 围着尝试和抓住

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谢谢您的提示,我只是一个程序员新手。虽然当我运行这个程序时,它没有输入任何捕获。将字符串与
=
进行比较最终会失败。请参阅.Does
in.readLine()
hang,或者
stdIn.readLine()
hang?@vgr它在.readLine()中挂起以了解while循环条件。它甚至从来没有进入循环。如果我只是键入'in.readLine()',它将挂起。在它到达.readLine()之前,一切都正常运行