2013-03-15 4 views
6

मैं जावा में स्क्रैच से आरपीजी लड़ाकू प्रणाली लिख रहा हूं, महत्वाकांक्षी अधिकार? खैर, मुझे कुछ परेशानी हो रही है।एक स्कैनर बंद करना java.util फेंकता है.नहीं SuchelementException

आप क्या करेंगे:

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

जब यह कोड मैं में उस बिंदु हिट: यह मेरा कोड है? (लड़ो) (भागो) (प्रयोग मद) धागा "मुख्य" java.util.NoSuchElementException में
अपवाद कहो: नहीं लाइन java.util.Scanner.nextLine (अज्ञात स्रोत)
Combat.turnChoice में (लड़ाकू पर
पाया .java: 23)

कक्षा को कॉम्बैट कहा जाता है, मैं बस इसे लड़ने या चलाने या वस्तुओं का उपयोग करने का विकल्प देना चाहता हूं, मैं पहले केवल लड़ाई विधि की कोशिश कर रहा हूं। कृपया मदद करें, मैं जावा के लिए नया हूं, इसलिए यदि संभव हो तो चीजों को बहुत जटिल न बनाएं।

+0

क्या आपने 'java.util.Scanner आयात किया है' '? –

+0

Combat.java लाइन 23 क्या है? – longhua

उत्तर

20

जब आप System.in से Scanner का उपयोग कर पढ़ रहे हैं, तो आप किसी भी Scanner आवृत्तियां बंद नहीं करना चाहिए, क्योंकि एक को बंद करने System.in बंद हो जाएगा और जब आप निम्नलिखित करते हैं, 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

क्या यह स्मृति रिसाव का कारण नहीं बनता? – user2172205

+0

आईटी काम करता है! आपको बहुत - बहुत धन्यवाद! – user2172205

+4

'System.in' को JVM द्वारा बंद कर दिया गया है और आपको इसे बंद नहीं करना चाहिए। इसके बारे में चिंता मत करो। स्कैनर सिर्फ बफर पाठक हैं। – mostruash

संबंधित मुद्दे