java - Q:帮助理解关闭Scanner
问题描述
这是我的工作代码。
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()
将抛出:
NoSuchElementException
从我发现似乎关闭单个 Scanner closes System.in
。那是对的吗?
绕过它的好方法是什么?只在最后关闭?
用单机更好Scanner
吗?
我是否使用Scanners
as 全局类元素?
我只是不关闭Scanners
吗?
解决方案
解决此问题的方法是创建自己的java.io.FilterInputStream
.
Scanner myScanner = new Scanner(new FilterInputStream(System.in) {
public void close() throws IOException {
}
});
现在当你打电话时,
myScanner.close();
它只关闭你FilterInputStream
离开的System.in
开放
(来源)。
Scanner
或者,只要您的应用程序是单线程的,您就可以只使用一个。
推荐阅读
- python - 无法提取所有出现的模式匹配
- vb.net - WinAppDriver:无法在本地会话中连接到远程服务器
- java - 访问矩阵中特定单元格的对角线
- java - 事务模板中的多个批处理查询
- java - 在运行时动态过滤火花列
- github - 我是 githib 新手,在合并分支时遇到问题,导致删除
- r - R:如何转置和合并表格
- authentication - WebAPI - 令牌端点和 API 端点的单独部署
- java - 有没有办法通过 @Autowired 注释在另一个类中创建同一类的多个实例?
- python - python selenium - chromedriver 在一个会话中更改代理