我正在制作一个非常基础的数据库管理程序,我有一个名称和值的扫描程序在一个类中工作正常(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)
我很困惑为什么会这样,因为我有另一台扫描仪工作得非常好。
答案 0 :(得分:4)
当您关闭Scanner
时,它也会关闭基础InputStream
。因此,如果您在程序的较早位置使用System.in
创建扫描程序,然后关闭该扫描程序,则会关闭System.in
。
一旦输入流关闭,就无法再读取输入流,尝试这样做会导致NoSuchElementException
。