System.in异常关闭

时间:2016-12-04 14:33:48

标签: java stream java.util.scanner inputstream

我想使用Scanner从控制台读取。我创建一个新对象,初始化它,当主线程的工作完成后,我调用一个名为maintenance ()的函数。然后我实例化一个新的Scanner

private void maintenance ()
{
    Scanner in = new Scanner(System.in);
    while (in.hasNext())
    {
        String choice = in.next().toLowerCase();
        ...  

好吧,in.hasNext()返回阻止主线程的false intead。当我调试Scannernext()方法时:

public boolean hasNext() {
    ensureOpen();
    saveState();
    while (!sourceClosed) {
        if (hasTokenInBuffer())
            return revertState(true);
        readInput();
    }
    boolean result = hasTokenInBuffer();
    return revertState(result);
}

我看到sourceClosed值为true。好吧,我很确定我从未在其他任何地方使用System.in流,也没有关闭它。溪流似乎以不同寻常的方式关闭。在尝试其他所有操作之前,我尝试在Scanner方法中创建main(),但问题仍然存在。

我再次调试,并将System.in添加到监视列表,并看到它具有以下属性:

System.in = BufferedInputStream@1086
buf = {byte[8192]@1087} //All 0 values
count = 0
pos = 0
markpos = -1
marklimit = 0
in = {FileInputStream@1088} //Which is another class 

然后我也添加了

System.out.println(System.in.read());

打印-1表示流已关闭 这真的很不寻常。有人可以帮我解决可能的解决方案吗?

0 个答案:

没有答案