For BufferedReader.readline()上的循环停止程序执行而不抛出异常

时间:2015-10-18 06:05:06

标签: java for-loop while-loop stream

public static void main(String[] args) throws IOException {
    String hostName = "localhost";
    int portNumber = 9000;            
        Socket primarySocket = new Socket(hostName, portNumber);
        PrintWriter out =
            new PrintWriter(primarySocket.getOutputStream(), true);
        BufferedReader in =
            new BufferedReader(
                new InputStreamReader(primarySocket.getInputStream()));

        Scanner sc = new Scanner(System.in);

        //main loop
        boolean quit = false;
        while(!quit){
            System.out.println("please enter a message.");
            String userInput = sc.nextLine();
            if (userInput.equals("quit")){
                quit=true;
            }
            out.println(userInput);
            System.out.println("Text was sent to server");

            for(String line = in.readLine(); line != null; line = in.readLine()){
                System.out.println(line);
                System.out.println("This is printed exactly once")
            }

            System.out.println("this line is never reached");
        }

这是我正在处理的代码。服务器配置为简单地回显它收到的任何内容。

与终端的互动是:

请输入信息。

消息

文本已发送到服务器

消息

此文字只打印一次

然后停止并且永远不会打印“永远不会到达此行”。我在eclipse调试器中运行了for循环。它只是停止执行,就像程序崩溃一样,但没有任何异常抛出任何地方。我希望它可以打印正在流上等待的内容,然后再次开始执行top while循环,但它似乎无声地崩溃或类似的东西。

我最初在readline上使用while循环!= null,它具有相同的行为。

0 个答案:

没有答案