黑马程序员技术交流社区

标题: BufferedReader的readLine()方法为什么不会结束? [打印本页]

作者: 李大强    时间: 2013-2-7 17:48
标题: BufferedReader的readLine()方法为什么不会结束?
本帖最后由 李大强 于 2013-2-12 10:37 编辑

写了一个程序用户获取用户的输入并打印在控制台上,当把用户的数据都打印完以后程序就退出,可是下面的程序
一直都不会结束!非要按Ctrl+C强制结束不可!


import java.io.*;

class  TransStreamDemo
{
        public static void main(String[] args) throws IOException
        {
               
                BufferedReader bufr =
                                new BufferedReader(new InputStreamReader(System.in));


                String line = null;

                while((line=bufr.readLine())!=null)//为什么此循环一直都不结束?
                {
                        System.out.println(line);
                }

                bufr.close();

        }
}
作者: 胡发友    时间: 2013-2-7 17:57
同学,你没有家结束标记;
应该在循环中加上结束标记
while((line = bufr.readLine()) != null){
        if("over".equals(line))
              break;
        System.out.println(line);
}
作者: pzfpang449    时间: 2013-2-7 19:39
本帖最后由 庞在飞 于 2013-2-7 19:40 编辑

String line = null;

                while((line=bufr.readLine())!=null)//为什么此循环一直都不结束?
                {
                        System.out.println(line);
                }

                bufr.close();
楼主文帝是为什么此循环一直都不结束  
  这个很简单的,你可以看看Java Api上面说的说的很具体,readLine()是一个堵塞机制。
   阻塞着不向下运行,readLine()方法,它是一个阻塞式方法,只有读到了回车换行符后才能运行后面的代码!
    ctrl+c是强行退出线程。就类似咱的任务管理器,强制关闭某个线程。
最好的办法是给一个结束的标志,例如楼上说的加个"over"标志。也是不错的。

希望对楼主有所帮助




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2