2013-03-15 15 views
6

Sto scrivendo un sistema di combattimento RPG da zero in Java, ambizioso vero? Beh, sto avendo qualche problema. Questo è il mio codice:Chiusura di uno scanner genera java.util.NoSuchElementException

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(); 
} 

quando colpisce quel punto nel codice ottengo:

Cosa farai? Say (Lotta) (Run) (Usa oggetto)
Exception in thread java.util.NoSuchElementException "principale": Nessuna linea trovato
a java.util.Scanner.nextLine (fonte sconosciuta)
a Combat.turnChoice (Combattimento .java: 23)

La classe si chiama Combattimento, voglio solo dare un'opzione per combattere o correre o usare oggetti, sto provando solo il metodo di combattimento prima. Per favore aiuto, sono un po 'nuovo per Java quindi non rendere le cose troppo complicate se possibile.

+0

hai eseguito 'import java.util.Scanner;'? –

+0

Che cos'è Combat.java line 23? – longhua

risposta

20

Quando si leggono utilizzando Scanner da System.in, non si dovrebbe chiudere tutte le istanze Scanner perché chiudendo uno si chiuderà System.in e quando lo fai quanto segue, saranno gettati NoSuchElementException.

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

Non causerebbe una perdita di memoria? – user2172205

+0

FUNZIONA! GRAZIE MILLE! – user2172205

+4

'System.in' viene chiuso da JVM e non è necessario chiuderlo. Non preoccuparti per questo Gli scanner sono solo lettori di buffer. – mostruash

Problemi correlati