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

时间:2015-08-17 02:54:08

标签: 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);
  }

我使用此行的方法之一:

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

2 个答案:

答案 0 :(得分:4)

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

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

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

  

如果此扫描程序尚未关闭,那么如果其基础readable也实现了Closeable界面,那么将调用可读的close方法

答案 1 :(得分:2)

您是否尝试过不尝试使用?

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