我有一个Scanner链接System.in.现在,在使用之后Scanner,我应该关闭它,因为它是不好的编码实践,让它打开.但是,如果我关闭Scanner,我也将关闭System.in!任何人都可以告诉我如何关闭Scanner没有关闭System.in(如果有任何方式).
我正在尝试将我的应用程序中一个经常使用的大部分内容重新分解为单独的方法,以使其更易于维护.
其中一些方法要求用户输入并进行输入验证,所以我使用了扫描仪和System.in但是当我关闭扫描仪时我也关闭了System.in
所以我的问题是,我是否可以通过使用CloseShieldInputStream屏蔽它来阻止System.in关闭,还是我应该开始将Scanner传递给方法?
我正在学习Java并且正在开展一些有趣的项目.我遇到的一个问题是,当我使用一个Scanner对象时,Eclipse警告我:
资源泄漏:'扫描'永远不会关闭.
所以,我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();
}
}
Run Code Online (Sandbox Code Playgroud)
在scanTest类中关闭扫描仪并test2 …