Forum: PC-Programmierung Java: EIngabe per Scanner wirft Exception


von JavaNeuling (Gast)


Lesenswert?

Mir ist nicht ganz klar, warum der untenstehende Code nur bis zur ersten 
Eingabe läuft und dann eine Exception wirft:
1
Exception in thread "main" java.util.NoSuchElementException
2
  at java.util.Scanner.throwFor(Scanner.java:862)
3
  at java.util.Scanner.next(Scanner.java:1371)
4
  at Input.inp(Input.java:13)
5
  at Input.main(Input.java:26)

Hier der Programmcode eines Übungsbeispieles, bei dem eine 
Konsolen-Eingabe per Scanner-Klasse in eine Methode verpackt wurde:
1
import java.util.Scanner;
2
3
4
public class Input
5
{
6
  public static void prn(String txt){
7
    System.out.println(txt);}
8
  
9
  public static String inp(String hinw){
10
    System.out.print(hinw);
11
    Scanner sc = new Scanner(System.in); //öffnet das File "System.in";
12
    String s = sc.next(); //liest Alles ein, bis Return
13
    sc.close(); //schließt Scanner
14
    return s;
15
  }
16
  
17
  public static void main(String[] args){
18
    
19
    String erg;
20
    
21
    erg=inp("Vorname: ");
22
    prn(erg);
23
    
24
    erg=inp("Nachname: "); //<--- hier kracht es
25
    prn(erg);      
26
  }
27
}

Danke sehr für Hinweise.

von JavaNeuling (Gast)


Lesenswert?

Habe inzwischen herausgefunden, dass die Exception ausbleibt, wenn ich 
auf "sc.close();" verzichte. Aber wieso? Der Scanner sc wird doch mit 
jedem Aufruf von inp() sowieso neu erstellt?

von Franko S. (frank_s866)


Lesenswert?

Weil das den Stream auch gleich mit schliesst beim nächsten Aufruf gibt 
es deshalb einen Fehler.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.