我正在学习Java,并且为了好玩而做一些项目。 我遇到的一个问题是,当我使用 Scanner
对象时,Eclipse会警告我:
资源泄漏:'scan'从未关闭。
因此,我在代码末尾添加了 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();
}
}
在scanTest
类中关闭扫描器后,进入test2
的do循环后,在test = scan.nextInt();
这行代码处发生错误。
我尝试将扫描器对象的创建移动到do循环中,以便每次都创建一个新对象,但仍然会出现错误。
不确定为什么会发生这种情况,也不知道如何确保关闭所有的I/O对象而不会遇到问题。
我看到的一篇帖子提到当关闭System.in
时,它不能重新打开。如果是这样,那我只需要在程序的最后确保关闭使用了System.in的扫描器对象,并忽略其他类中的所有扫描器警告吗?还是这会使得所有这些扫描器对象都保持打开状态(不好)?