Java:try(Scanner scan = new Scanner(System.in) { } 导致异常

Har*_*ian 0 java debugging java.util.scanner

使用try(Scanner scan = new Scanner(System.in)) { }导致

线程“main”中的异常 java.util.NoSuchElementException

当我尝试调试时,它说

变量信息不可用,源代码编译时没有 -g 选项。

并显示以下代码

    public Scanner(InputStream source) {
    this(new InputStreamReader(source), WHITESPACE_PATTERN);
  }
Run Code Online (Sandbox Code Playgroud)

我使用这一行的方法之一:

protected String loginName(){
    String username;
    String password;
    try (Scanner scan = new Scanner(System.in)) { // This line is causing the error.
      System.out.print("Enter Username: ");
      username = scan.next();
      System.out.print("Enter Password: ");
      password = scan.next();
    }
    if(getUsernamesList().contains(username))

        if(password.equals(getPasswordsList().get(getUsernamesList().indexOf(username)))) return username;
        else return "-1";

    else return "-1";
}
Run Code Online (Sandbox Code Playgroud)

Ell*_*sch 5

你正在关闭System.in(一个全局变量)。不要那样做。随处可见

try(Scanner scan = new Scanner(System.in))
Run Code Online (Sandbox Code Playgroud)

保证System.in将是close(d)。一旦它是close(d) 你就不能再读它(或者你被提到了Exception)。此外,您可以使用调试符号进行编译(或使用 IDE 的内置调试器或jdb(如果适用)进入它)。该Scanner.close()Javadoc中说,(部分)

如果这个扫描器还没有关闭,那么如果它的底层可读也实现了Closeable接口,那么可读的close方法将被调用