/ / Fermer un scanner lève java.util.NoSuchElementException - java, chaîne, exception, élément

Fermer un scanner lève une exception java.util.NoSuchElementException - java, string, exception, element

J'écris un système de combat RPG à partir de zéro en Java, ambitieux, n'est-ce pas? Eh bien, j'ai quelques problèmes. Ceci est mon code:

void turnChoice() {
System.out.println("What will you do? Say (Fight) (Run) (Use Item)");
Scanner turnChoice = new Scanner(System.in);
switch (turnChoice.nextLine()) {
case ("Fight"):
Combat fighting = new Combat();
fighting.fight();
default:
}

turnChoice.close();
}

Quand cela touche ce point dans le code, je reçois:

Que vas-tu faire? Dire (combat) (courir) (utiliser l'élément)
Exception dans le fil "principal" java.util.NoSuchElementException: aucune ligne trouvée
à java.util.Scanner.nextLine (Source inconnue)
à Combat.turnChoice (Combat.java:23)

La classe s'appelle Combat, je le veux justedonnez une option pour combattre ou courir ou utiliser des objets, j’essaie d’abord la méthode du combat. Aidez-moi, je suis un peu nouveau en Java, alors ne compliquez pas les choses si possible.

Réponses:

22 pour la réponse № 1

Quand vous lisez en utilisant Scanner de System.in, vous ne devriez pas fermer Scanner cas parce que la fermeture d'un fermera System.in et quand vous faites ce qui suit, NoSuchElementException sera jeté.

Scanner sc1 = new Scanner(System.in);
String str = sc1.nextLine();
...
sc1.close();
...
...
Scanner sc2 = new Scanner(System.in);
String newStr = sc2.nextLine();      // Exception!