Scanner-Fehler, den ich nicht herausfinden können: NoSuchElementException
Es zu Abstürzen auf der Dritten Linie innerhalb der do-while-Schleife, und nicht warten, bis mein input:
input = kb.nextInt();
Stack trace:
Exception in thread "main" java.util.NoSuchElementException
in java.util.Scanner.throwFor(Quelle Unbekannt)
in java.util.Scanner.next(Unknown Source)
in java.util.Scanner.nextInt(Unknown Source)
in java.util.Scanner.nextInt(Unknown Source)
am main.MainDriver.main(MainDriver.java:50)
Relevante code:
do
{
displayFullMenu();
System.out.print("Selection: ");
input = kb.nextInt();
switch (input)
{
//Create new survey
case 1: currentSurvey = new Survey();
break;
//Display current survey
case 2: currentSurvey.display();
break;
//Save current survey
case 3: saveSurvey(currentSurvey);
break;
//Load a survey
case 4: currentSurvey = loadSurvey();
break;
//Modify a survey
case 5: currentSurvey.modify();
break;
/*******************Test Functions*******************/
//Create new test
case 6: currentSurvey = new Test();
break;
//Display current test
case 7: currentSurvey.display();
break;
//Save current test
case 8: saveSurvey(currentSurvey);
break;
//Load a test
case 9: currentSurvey = loadTest();
break;
//Modify a test
case 10: currentSurvey.modify();
default: System.out.println("Invalid choice. Please make a valid choice: ");
input = kb.nextInt();
System.out.println();
}
} while (input != 99);
kb.close();
Stürzt es ab, nachdem ich wählen Sie option 9. Es speichert die Datei korrekt, dann geht zurück an den Anfang der Schleife, und stürzt bei der zuvor genannten Linie. Ich will es zu Fragen, für mehr input.
Was gibt?
- Wie sind Sie initialisieren den scanner. Verwenden Sie "Scanner kb = new Scanner(System.in);" ? Außerdem aktivieren debugging-Symbole beim kompilieren geben Sie die Zeilennummern in Ihrem stack-trace.
- ja, ich bin initialisieren es so. Wenn ich wählen Sie die option 8, in saveSurvey(), es einen neuen Scanner (in dieser Methode), weil dies alles in meiner main-Methode. Könnte das das Problem sein?
- Das ist der einzige Ort, wo Sie Ihre Instanziierung des Scanners und schließen Sie es? Kann sein, dass du Sie tun das gleiche, in einigen von diesen Methoden wird es genannt.
- Gurung das ist richtig!!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, das könnte das Problem sein. Wenn das
Scanner
hat die gleiche Quelle (System.in
?) alskb
und istclose()
d, schließt die zugrunde liegenden stream undkb
keine Eingabe mehr.Scanner scanner = new Scanner(System.in)
in einer bestimmten Methode, die ich rief mehrere Male, und -scanner.close()
vor der Rückkehr aus der Methode. So, nachdem der erste Anruf, ich habe gerade geschlossen die zugrunde liegenden stream. Schade )Habe ich es herausgefunden.
Das ganze Problem verursacht wurde, indem mir nicht um ein statisches scanner in Haupt - und, wenn ich Sie brauchte, die in anderen Methoden außerhalb der main, habe ich neue geschaffen.
Statt
Hatte ich:
Und dann neu angelegt-Scanner in den anderen Methoden. Am Ende dieser Methoden, ich Schloss den Scanner. Ich denke, es war die Schließung der lokale scanner, denn wenn ich entledigte sich alle
close()
Aussagen, wurden innerhalb der anderen Methoden, ist das Problem verschwunden.