这是我的工作代码。public static void play() { Scanner myScanner = new Scanner(System.in); Scanner myOtherScanner = new Scanner(System.in); while (!endCondition()) { //stuff shoot(myScanner); } keepPlaying(myOtherScanner); myScanner.close(); myOtherScanner.close();}接收方法myScanner:static void shoot(Scanner sc) { int bullet; //Stuff bullet = Integer.parseInt(sc.next()); //More stuff}接收方法myOtherScanner:static void keepPlaying(Scanner myOtherScanner) { //Stuff int option = Integer.parseInt(myOtherScanner.next()); //More stuff}现在我不明白的是:如果我myScanner在调用之前关闭keepPlaying(myOtherScanner),myOtherScanner.next()将抛出:无此类元素异常从我发现的情况来看,关闭单个 Scanner 似乎会关闭System.in. 那是对的吗?绕过它的好方法是什么?只在最后关门?使用单个更好Scanner吗?我是否使用Scannersas 全局类元素?我只是不关闭Scanners吗?
2 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
解决此问题的方法是创建您自己的java.io.FilterInputStream.
Scanner myScanner = new Scanner(new FilterInputStream(System.in) {
public void close() throws IOException {
}
});
现在当你打电话时,
myScanner.close();
它只关闭你FilterInputStream离开System.in开放 (源)。
或者Scanner,只要您的应用程序是单线程的,您就可以只使用一个。
www说
TA贡献1775条经验 获得超8个赞
当您.close()
像调用myScanner.close();
它那样调用任何资源时,它也会关闭资源和in
流。
一旦输入流关闭,它就无法重新打开(根据 javadoc),并且由于您System.in
在两个扫描仪中使用相同的流,一旦它被关闭,myscanner
它就不可用于myOtherScanner
,因此它给出异常。
添加回答
举报
0/150
提交
取消