BufferedReader.readLine()暂停我的应用程序?

时间:2015-03-02 16:41:44

标签: java

我正在使用此代码:

while (true) {
    sendData("hi");
    System.out.println("Data sent!");
    BufferedReader inFromServer;
    try {
        inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    } catch (IOException e1) {
        inFromServer = null;
        e1.printStackTrace();
    }
    System.out.println("Recieved!"); //I see this de-bug message.
    try {
        modifiedSentence = inFromServer.readLine();
        System.out.println("FROM SERVER: " + modifiedSentence); //I do NOT see this de-bug message!
    } catch (IOException e) {
        e.printStackTrace();
    }
}

成功将数据发送到服务器 - 服务器成功发送数据:

public void run () {
    //handle the session using the socket (example)
    try {
        sendData("Hi");
        System.out.println("Data sent!"); //I see this de-bug message.
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但是出于某种原因,应用程序似乎暂停在inFromServer.readLine()方法中。我看到"收到了!" de-bug消息,但不是" FROM SERVER"去bug消息。

enter image description here

根本没有错误。它似乎就在那里。

为什么要悬挂,我该如何解决?

1 个答案:

答案 0 :(得分:3)

这只是意味着inFromServer没有收到任何一行。

确保你真的发送了一行,

  

读取一行文字。一条线被认为是任何一条线终止的   换行(' \ n'),回车(' \ r')或回车   然后立即换行。

查看readLine方法:

String readLine(boolean ignoreLF) throws IOException {
    StringBuffer s = null;
    int startChar;

    synchronized (lock) {
        ensureOpen();
        boolean omitLF = ignoreLF || skipLF;

    bufferLoop:
        for (;;) {

            if (nextChar >= nChars)
                fill();
            if (nextChar >= nChars) { /* EOF */
                if (s != null && s.length() > 0)
                    return s.toString();
                else
                    return null;
            }
            boolean eol = false;
            char c = 0;
            int i;

            /* Skip a leftover '\n', if necessary */
            if (omitLF && (cb[nextChar] == '\n'))
                nextChar++;
            skipLF = false;
            omitLF = false;

        charLoop:
            for (i = nextChar; i < nChars; i++) {
                c = cb[i];
                if ((c == '\n') || (c == '\r')) {
                    eol = true;
                    break charLoop;
                }
            }

            startChar = nextChar;
            nextChar = i;

            if (eol) {
                String str;
                if (s == null) {
                    str = new String(cb, startChar, i - startChar);
                } else {
                    s.append(cb, startChar, i - startChar);
                    str = s.toString();
                }
                nextChar++;
                if (c == '\r') {
                    skipLF = true;
                }
                return str;
            }

            if (s == null)
                s = new StringBuffer(defaultExpectedLineLength);
            s.append(cb, startChar, i - startChar);
        }
    }
}

请注意,这个接收布尔值,但调用readLine只需调用此false传递,除非在Linux上。

注意for(;;)循环,这是一个无限循环。

尝试连接&#34;行&#34;从服务器发送

System.getProperty("line.separator");