黑马程序员技术交流社区

标题: Io抛异常的问题 [打印本页]

作者: 周亮    时间: 2012-12-30 14:47
标题: Io抛异常的问题
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//创建多个键盘输入br时,如果把前面的br释放资源,后面的程序在执行时会报java.io.IOException异常,这是为什么?
public class SystemIntest {

        public static void main(String[] args) throws IOException {                               
                BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));                //创建第一个输入流对象br1
                String line1=null;
                while((line1=br1.readLine())!=null){
                        if("over".equals(line1))
                                break;
                        System.out.println(line1);
                }
                br1.close();//关闭br1,释放资源
               
                BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));                //创建第二个输入流对象br2
                String line2=null;
                while((line2=br2.readLine())!=null){
                        if("over".equals(line2))
                                break;
                        System.out.println(line2);
                }
                br2.close();//关闭br2,释放资源
        }
}
作者: 黄锦成    时间: 2012-12-30 17:14
InputStream i1 = System.in;
InputStream i2 = System.in;
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
测试了一下,发现返回的是同一个对象。即在一个控制台中,控制台输入流只有一个

你写的代码那里,第一次关闭“br1.close();//关闭br1,释放资源”,其实关闭了System.in,关闭之后,在接下来的代码中,你使用line2=br2.readLine(),此时的System.in早就被你关闭了,就会产生错误。关闭的流不可再用


作者: 刘文超    时间: 2012-12-31 18:41
楼上正解~
作者: 肖志锋    时间: 2013-1-1 21:30
2楼说的对,但是可以看看错误提示的,IOException后面还有一句话的,System closed。很多时候看错误提示就能找到错误的地方的。




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