我想使用Scanner
从控制台读取。我创建一个新对象,初始化它,当主线程的工作完成后,我调用一个名为maintenance ()
的函数。然后我实例化一个新的Scanner
:
private void maintenance ()
{
Scanner in = new Scanner(System.in);
while (in.hasNext())
{
String choice = in.next().toLowerCase();
...
好吧,in.hasNext()
返回阻止主线程的false intead。当我调试Scanner
类next()
方法时:
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表示流已关闭 这真的很不寻常。有人可以帮我解决可能的解决方案吗?