如何在java中关闭扫描仪?
当我运行以下代码时如何在java中关闭扫描仪?,java,java.util.scanner,Java,Java.util.scanner,当我运行以下代码时 private static String input(String Message){ Scanner input_scanner = new Scanner(System.in); System.out.print("\n" + Message); String string = input_scanner.nextLine(); input_scanner.close(); return string; } 我得到这个错误: E
private static String input(String Message){
Scanner input_scanner = new Scanner(System.in);
System.out.print("\n" + Message);
String string = input_scanner.nextLine();
input_scanner.close();
return string;
}
我得到这个错误:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at main.learn.input(learn.java:25)
at main.learn.main(learn.java:13)
我发现这与行input_scanner.close()有关代码>但当我删除它时,会收到警告,提示:
资源泄漏:“输入\ U扫描仪”从未关闭
我是否可以阻止错误的发生并消除警告?您应该使用hasNextLine
api检查是否有数据用于扫描仪,您可以这样做:
String string = "";
if (input_scanner.hasNextLine()) {
string = input_scanner.nextLine();
}
首先,我建议您使用API来理解Java向您展示的异常
有关NoTouchElementException的更多信息,请阅读此内容:
当您使用scanner、stringTokenizer、迭代器时……在尝试读取之前,您必须验证您有更多的元素要读取。如果您不这样做,您可能会得到这种类型的异常
private static String input(String Message){
Scanner input_scanner = new Scanner(System.in);
System.out.print("\n" + Message);
if (input_scanner.hasNextLine()){
String string = input_scanner.nextLine();
}
input_scanner.close();
return string;
如果要读取多行,请使用while(input\u scanner.hasNextLine())
您的错误在于键盘输入。请阅读以下内容以了解您在该部分是否做得很好:
PS:建议您在使用完扫描仪后,使用input\u scanner.close()
关闭扫描仪。使用try with resources确保扫描仪关闭,无论是否出现任何异常
try (Scanner input_scanner = new Scanner(System.in)) {
.
.
.
}
您可以将其用于实现AutoCloseable的任何东西,这比关闭时抛出的异常需要一堆try-catch要好得多。实际上,因为您使用的是System.in的Scanner,这意味着它是一个阻塞调用,将一直保持到收到用户的第一个输入为止。
作为一个局部变量,您实际上不需要关闭扫描器,也不需要hasNextLine()的while循环
扫描操作可能会阻止等待输入。如果未收到任何输入,则扫描对象不必读取,这会引发异常,因为它找不到需要关闭的元素。通过验证流是否包含扫描对象可以读取的任何内容,将帮助您获得此类异常操作。如果您确实需要输入,那么您应该使用while循环。现在它将检查您是否有任何数据要使用,如果没有,那么它将返回一个空字符串。我认为您无法将多个扫描仪与System.in
可靠地结合使用。如果您关闭它,那么您将关闭系统。
…如果您没有,那么第二个扫描仪将关闭u create可能不会从第一个停止的位置开始(因为第一个可能缓冲了一些行)Closeable
应该是AutoCloseable
private static String input(String Message){
Scanner input_scanner = new Scanner(System.in);
System.out.print("\n" + Message);
String string = input_scanner.nextLine();
return string;