Java -- 关闭扫描程序和资源泄漏
我正在学习Java,并从事一些有趣的项目。我遇到的一个问题是,当我使用对象时,Eclipse会警告我:Scanner
资源泄漏:“扫描”永远不会关闭。
因此,我在代码的末尾添加了一个,该代码负责警告。scan.close();
问题来了,因为我在同一个包中还有其他类也使用扫描仪对象,Eclipse告诉我分别关闭这些类中的扫描仪。但是,当我这样做时,它似乎关闭了所有扫描仪对象,并且在运行时遇到错误。
以下是导致错误的原因的示例:
import java.util.Scanner;
public class test2 {
public static void main(String [] args) {
Scanner scan = new Scanner(System.in);
int test = 0;
do {
//Do stuff
test = scan.nextInt();
System.out.println(test);
scanTest scanTest = new scanTest();
scanTest.test();
} while (test != 0);
scan.close();
}
}
import java.util.Scanner;
public class scanTest {
public void test() {
Scanner scanner = new Scanner(System.in);
int blah = scanner.nextInt();
System.out.println(blah);
scanner.close();
}
}
在类中关闭扫描仪并再次输入 do 循环后,该行发生错误scanTest
test2
test = scan.nextInt();
我尝试将扫描仪对象的创建移动到do循环中,只是为了每次都创建一个新对象,但错误仍然发生。
不知道为什么会发生这种情况,或者我如何确保我的所有I / O对象都关闭而不会遇到问题。
我遇到的一篇文章提到,当关闭时,我无法重新开放。如果是这种情况,我只需要确保在程序结束时关闭具有 System.in 的扫描仪对象,并在其他类中@suppress所有其他扫描仪警告?还是仍然会让所有这些扫描仪对象保持打开状态(不好)?System.in