在我的代码中,我打开了两种扫描仪方法,但关闭一台扫描仪将全部关闭。
LEFT(LIST_OF_NUMBERS,10)
10, 20, 39
`这里xd.close也会关闭我的扫描仪,为什么呢?以及如何克服这个问题?朋友我需要知道为什么吗?还有其他方法可以暂时关闭扫描仪以防止内存泄漏吗?
答案 0 :(得分:3)
因为python-ivi将隐式关闭discord.Forbidden
:
如果此扫描仪尚未关闭,则其基础 可读性还实现了Closeable接口,然后可读性的 close方法将被调用。
答案 1 :(得分:3)
为什么?因为规范就是这样说的;请参阅@Sun的答案作为参考以及规范中的文字。
它如何克服这个问题?
请勿在包含close()
的{{1}}中调用Scanner
。这只是一般原则的一种应用,即资源应该由打开它的相同代码来关闭。 (JVM打开System.in
,因此您不应该关闭它。)
或者,如果您必须关闭System.in
,则编写或找到忽略Scanner
方法的InputStream
包装器类,然后使用该包装器包装{{ 1}}。
顺便说一句,多次实例化close()
是一个坏主意。问题是System.in
可能会读取任何或所有预输入内容。如果您有两个或多个包装相同的基础流,则一个new Scanner(System.in)
可以捕获以后需要读取的输入。如果在shell级别上重定向标准输入,这可能会导致偶尔的意外行为,并且有可能导致您的应用程序失败。