Java:尝试(扫描程序扫描=新扫描程序(System.in){}导致exception

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

线程“main”java.util.NoSuchElementException中的exception

当我尝试调试它说

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

并显示以下代码

  public Scanner(InputStream source) { this(new InputStreamReader(source), WHITESPACE_PATTERN); } 

我使用此行的方法之一:

 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"; } 

你正在关闭System.in (一个全局变量)。 不要这样做。 无处不在

 try(Scanner scan = new Scanner(System.in)) 

保证System.inclose (d)。 一旦它close (d)你再也无法读取它(或者你得到你提到的Exception )。 此外,您可以使用调试符号进行编译(或使用IDE的内置调试器或jdb(如果适用)进入它)。 Scanner.close() Javadoc说(部分),

如果此扫描程序尚未关闭,那么如果其底层可读也实现了Closeable接口,那么将调用可读的close方法

你尝试过不尝试吗?

 String username; String password; Scanner scan = new Scanner(System.in); System.out.print("Enter Username: ");