为什么while不会在第二个循环停止

时间:2018-06-19 08:30:44

标签: java while-loop readline

在第一个循环停止并等待incomStr = view.read();的控制台输入但在第二个循环时它不会停止,读取null并继续。

为什么会这样?

public void mainDialogueHolder() {//todo

        setCmdState(CmdLineState.WAIT);
        view.write("Hello, user!");
        view.write("Please, type `help` for list available commands. ");
        while (getCMDState().equals(CmdLineState.WAIT)){
            String incomStr;
            incomStr = view.read();//implementation is below
            readCmd(incomStr);
        }
    }

视图的实现

public class Console implements View {

    @Override
    public void write(String message) {
        System.out.println(message);
    }

    @Override
    public String read() {
        try (
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))
        ){
            return reader.readLine();
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

看起来你的资源尝试通过关闭BufferedReader来关闭System.in,然后关闭它的Reader(InputStreamReader)并关闭System.in。 System.in是最终的静态,因此一旦你关闭它,你将无法再次使用它,因为它无法重新打开它。 那我该怎么办呢?如果我不能关闭它? 也许你可以像在In Java is it possible to re-open System.in after closing it

那样写一个包装器