Java的;一旦遇到输入,我就会得到“线程中的异常”主“java.util.NoSuchElementException”

时间:2016-10-25 02:02:00

标签: java java.util.scanner

我正在制作一个非常基础的数据库管理程序,我有一个名称和值的扫描程序在一个类中工作正常(Account.java),

public static void createNewAccount() {

    Scanner newScan = new Scanner(System.in);
    System.out.print("Enter name: ");
    String inputName = newScan.nextLine();
    name = inputName;
    System.out.print("Enter the initial value: ");
    double inputBalance = newScan.nextInt();
    System.out.println("... successfully created new account.");

    keyScan.close();


    Account newAccount = new Account(inputName, inputBalance);

}

调试这一点工作正常,但是当我跳回我的其他类(Management.java)并点击我的switch语句时,我遇到了这个错误,我似乎无法在其他任何地方找到答案(很多人都会得到同样的错误,但似乎有不同的原因?)

...
Scanner in = new Scanner(System.in);

    Account.createAccount();
//Debugging statement #1 here works fine, can access other Class
do{
        /*
        Menu Options
        */
        System.out.println(">> Select your option (1-6)");
        choice = in.nextInt();

//Debugging statement #2 here doesn't display, this is where the error hits.

    switch (choice) {
         ... Cases
        }

这是控制台输出:

>> Select your option (1-6)
Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Unknown Source)
        at java.util.Scanner.next(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
        at Management.main(Management.java:30)

我很困惑为什么会这样,因为我有另一台扫描仪工作得非常好。

1 个答案:

答案 0 :(得分:4)

当您关闭Scanner时,它也会关闭基础InputStream。因此,如果您在程序的较早位置使用System.in创建扫描程序,然后关闭该扫描程序,则会关闭System.in

一旦输入流关闭,就无法再读取输入流,尝试这样做会导致NoSuchElementException