“线程中的异常”;“主要”;由扫描程序引起的java.util.NoSuchElementException

“线程中的异常”;“主要”;由扫描程序引起的java.util.NoSuchElementException,java,Java,我是新来的,请耐心点:) 我不明白为什么这个方法不能正常工作。它正在为我创建帐户,但是,当成功创建帐户时,它在同一方法mainMenu()上运行不正常。我使用了相同方法的递归调用。。。。 在调试过程中,从方法的第二次调用开始,我的扫描器似乎出现了问题 我是一名学生 public void mainMenu() { System.out.println("Select your option: "); System.out.println("1. Open a new acc

我是新来的,请耐心点:)

我不明白为什么这个方法不能正常工作。它正在为我创建帐户,但是,当成功创建帐户时,它在同一方法mainMenu()上运行不正常。我使用了相同方法的递归调用。。。。 在调试过程中,从方法的第二次调用开始,我的扫描器似乎出现了问题

我是一名学生

   public void mainMenu() {
    System.out.println("Select your option: ");
    System.out.println("1. Open a new account");
    System.out.println("2. Display all accounts");
    System.out.println("If you want to logout press 9");
    Scanner sc = new Scanner(System.in);
    int option = 0;
    do {
        try {
            option = sc.nextInt();
            System.out.println();
            switch (option) {
                case 1:
                    accountUtil.openNewAccount(userConsoleUtil.getUser().getUserName());
                    mainMenu();
                    break;
                case 9:
                    userConsoleUtil.logout();
                    displayLoginMenu();
                    break;
                default:
                    System.out.println("Invalid option! Try again");
            }
        } catch (InputMismatchException e) {
            System.out.println("Invalid option! Try again");
        }
        sc.nextLine();
    } while (option != 9);
    sc.close();
}

如果创建了对象帐户,它应该返回到方法的开头,允许创建新帐户或注销退出。感觉好像您错误地编写了sc.nextLine(),它接受了用户的输入。
在catch块结束后,行sc.nextLine()可能会给您意外的输出

感觉您错误地编写了sc.nextLine(),它接受了用户的输入。
在catch块结束后,行sc.nextLine()可能会给您意外的输出

鉴于您当前的代码和注释,看起来您正在其他方法中创建扫描程序并关闭它们。不要那样做。关闭扫描仪时,也会关闭系统中的
System.in
,从而导致
NoTouchElementException



鉴于您当前的代码和注释,看起来您正在用其他方法创建扫描程序并关闭它们。不要那样做。关闭扫描仪时,也会关闭系统中的
System.in
,从而导致
NoTouchElementException



我继续假设您在
openNewAccount
方法或
userConsoleUtil
中关闭扫描仪,因此请阅读链接的问题。这是真的……在所有方法中,我在方法的末尾关闭扫描仪。但在这种方法的恳求下,我打开了一个新的扫描仪。调试时,我看到该扫描仪的另一个编号。这不是新的吗?就像我说的,阅读链接帖子,它回答了你的问题。在Main上使用扫描仪。还有一个问题…如果在一个方法上,我将打开一个新的扫描程序,并且不会在方法结束时关闭它(我不想将参数扫描程序置于该方法,因为使用参数将无法再次工作),sc.close from Main类也将关闭该扫描仪?我将继续并假设您在
openNewAccount
方法或
userConsoleUtil
中关闭扫描仪,因此请阅读链接的问题。这是真的……在所有方法上,我在方法的末尾关闭扫描仪。但在这种方法的恳求下,我打开了一个新的扫描仪。调试时,我看到该扫描仪的另一个编号。这不是新的吗?就像我说的,阅读链接帖子,它回答了你的问题。在Main上使用扫描仪。还有一个问题…如果在一个方法上,我将打开一个新的扫描程序,并且不会在方法结束时关闭它(我不想将参数扫描程序置于该方法,因为使用参数将无法再次工作),主类的sc.close也将关闭该扫描程序?是否将其分配给变量无关紧要。是否将其分配给变量无关紧要。