BufferedReader 클래스의 readLine() 메쏘드 사용중 오류입니다.

vudghkzm의 이미지

아래는 예제 코드입니다.

import java.io.*;

public final class Test
{
    public static void main( String args[] )
    {
        Print();
        Print();
    }

    private static void Print()
    {
        System.out.print( "input : " );
        InputStreamReader ir = new InputStreamReader( System.in );
        BufferedReader br = new BufferedReader( ir );
        String input = null;

        try
        {
            input = br.readLine();
            br.close();
            ir.close();
        }
        catch( IOException e )
        {
            e.printStackTrace();
            System.exit( -1 );
        }
    }
}

실행결과는 아래와 같습니다.

input : asdf
input : java.io.IOException: Stream closed
        at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:304)
        at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
        at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.readLine(BufferedReader.java:299)
        at java.io.BufferedReader.readLine(BufferedReader.java:362)
        at Test.Print(Test.java:20)
        at Test.main(Test.java:8)

왜 두번째로 Print(); 를 부르면 stream closed 예외가 발생하는지 궁금하네요. 그리고 해결 방법도 알려주세요.

익명 사용자의 이미지

private static void Print()

->

private void Print()

vudghkzm의 이미지

왜 static 으로 하면 저런 오류가 생기는지 잘 이해가 안 갑니다. 설명 부탁드려도 될까요?