Wywołanie Scanner.close () zgłasza wyjątek nosuchelement
Mam prostą metodę, która drukuje polecenie na ekranie, skanuje dane wejściowe użytkownika i zwraca je jako ciąg znaków. Jeśli dane wejściowe użytkownika są nieprawidłowe, powiadamia użytkownika i prosi ponownie. Ta metoda działała doskonale, ale mój instruktor wspomniał, że zawsze powinniśmy zamykać zasoby, więc wróciłem i dodałem metodę close, a teraz otrzymuję wyjątek NoSuchElementException za każdym razem, gdy wywoływana jest metoda, niezależnie od danych wprowadzanych przez użytkownika. Oto kod ...
private String getUserString(String userCommand) {
System.out.println(userCommand);
Scanner scan = new Scanner(System.in);
String userinput = scan.nextLine().trim();
if (userinput.isEmpty()){
System.out.println("Invalid choice");
return getUserString(userCommand);
}
else {
return userinput;
}
}
Wyjątki zawsze wskazują z powrotem na linię, w której wprowadzono userinput jako scan.nextLine (). Trim () UWAGA * Dodałem scan.close () w każdym wierszu przed każdą instrukcją powrotu, jednak nie uwzględniłem tego powyżej.