Scanner schließen, erneute Verwendung

b1ck

Mitglied
Java:
    private static int[] eingabeZahlen(int[] e)
    {
        Scanner leser = new Scanner(System.in);
        for(int i=0; i<e.length; i++)
        {
            System.out.printf("Zahl %d: ", i+1);
            String eingabe = leser.nextLine();
            e[i] = Integer.parseInt(eingabe);
        }

        leser.close();
        return e;
    }
   
    private static int eingabeErgebnis()
    {
        int ergebnis = 0;
        Scanner leser = new Scanner(System.in);
        System.out.printf("Ergebnis: ");
        String eingabe = leser.nextLine();
        ergebnis = Integer.parseInt(eingabe);
       
        leser.close();
        return ergebnis;
    }

Hallo,
und zwar habe ich das Problem, dass nachdem der Scanner einmal geschlossen wurde, sich dieser sich kein weiteres Mal verwenden lässt. Sprich es kommt eine Exception, sobald ich die zweite Methode aufrufe.
Da ich den Scanner hier aber an keiner anderen Stelle als in den Methoden selber schließen kann, sollte ich diesen close()-Befehl nun einfach weglassen oder gibt es eine andere Möglichkeit dies zu bewerkstelligen?
 

Flown

Administrator
Mitarbeiter
Der Scanner kapselt bei dir System.in, darum sollte der Scanner auch nicht geschlossen werden, denn er schließt die darunterliegenden "Quellen" und in deinem Fall eben System.in. System IO sollte aber nur vom System geöffnet und geschlossen werden, daher lässt du einfach das Schließen dieses Scanners aus.
 

b1ck

Mitglied
Okay, vollständig nachvollziehen kann ich dein Gesagtes zwar nicht, aber ist das "nicht schließen" von Ressourcen eine nicht eher unsaubere Art zu programmieren?
 

Flown

Administrator
Mitarbeiter
Ja schon wenn es nicht gerade um die einzige Möglichkeit geht, von deinem Programm, etwas einzulesen.
Grundregel: System Resourcen nicht schließen (System.in, System.out, System.err). Alles weitere sollte geschlossen werden!
 

InfectedBytes

Top Contributor
Im Grunde sollte immer derjeniege eine Resource schließen, der sie auch aufgemacht hat. Im Falle von System.in, hast du sie aber nicht aufgemacht, daher sollst du sie auch nicht schließen.
 

b1ck

Mitglied
Habe doch noch eine Möglichkeit gefunden...
Man kann den Scanner leser einfach von der main an die Methoden übergeben, und diesen nach Ausführung dann wiederum in der main schließen, sobald alle Methoden, welche diesen benötigen, durchlaufen wurden.
 

fhoffmann

Top Contributor
Nein, (hier könnte auch "Hallo" stehen)

das solltest du nicht tun! Wie InfectedBytes schrieb, "sollte immer derjeniege eine Resource schließen, der sie auch aufgemacht hat". Du hast zwar einen Scanner erzeugt
Java:
new Scanner(System.in);
, aber die eigentliche Resource (System.in) hast du nicht aufgemacht. Niemand interessiet sich für deinen Scanner - die interessante Resource ist System.in. Deshalb wäre es schlechter Prorammierstil, den Scanner zu schließen, weil dieser System.in schließt.
 
Zuletzt bearbeitet:

b1ck

Mitglied
Hallo, (hier könnte Ihre Werbung stehen)

zunächst erstmal danke für die Rückmeldung. Wer hat dann zum einen diese Systemresource überhaupt aufgemacht, wenn nicht der Scanner? Oder sind diese grundsätzlich auf?

Und zum anderen bin ich nicht selber auf diese Idee gekommen, sondern habe in einem Video-Tutorial gesehen, wie dies so von einem Dozent für Informatik angewendet wurde. Alles im Rahmen eines sehr einfachen Rechenspiels. Aber auch in seinen anderen Beispielen, welche keine anderen Methoden außer der main-Methode enthalten, hat dieser stehts den Scanner nach Gebrauch wieder geschlossen. Das hat mich überhaupt erst dazu veranlasst, dieses auch bei einem Programm mit mehren Methoden zu versuchen. Daher meine Verwirrung ^^

Hier nun zu erfahren, das man das eigentlich garnicht so machen sollte, ist auf jedenfall gut zu wissen. Frage mich halt nur, warum das dann in dem Tutorial nicht so vermittelt wird.
 
Zuletzt bearbeitet:

InfectedBytes

Top Contributor
zunächst erstmal danke für die Rückmeldung. Wer hat dann zum einen diese Systemresource überhaupt aufgemacht, wenn nicht der Scanner? Oder sind diese grundsätzlich auf?
Die JVM hat diese Resource bei deinem Programmstart geöffnet und schließt sie auch wieder wenn dein Programm beendet ist.

Hier nun zu erfahren, das man das eigentlich garnicht so machen sollte, ist auf jedenfall gut zu wissen. Frage mich halt nur, warum das dann in dem Tutorial nicht so vermittelt wird.
Einerseits macht jeder Fehler, andererseits sind sehr viele Tutorials (m.M.n. insbesondere solche auch youtube) eben oft von Leuten gemacht die nicht wirklich Experten sind.
 

b1ck

Mitglied
Einerseits macht jeder Fehler, andererseits sind sehr viele Tutorials (m.M.n. insbesondere solche auch youtube) eben oft von Leuten gemacht die nicht wirklich Experten sind.

dieses video-tutorial ist jedoch ein käuflich erwerbliches (Programmieren lernen mit Java - Rheinwerk Verlag - Thomas Theis), welches sich bisher sehr gut zum lernen geeignet hat (sofern ich das beurteilen kann). habe aber auch noch 1,2 bücher zur hand, "Java lernen mit BlueJ" zum beispiel...

Du könntest System.in wrappen in einen ProxyInputStream. Siehe: https://commons.apache.org/proper/c.../commons/io/input/CloseShieldInputStream.html Wenn du den Scanner unbedingt closen willst. Aber ich stimme auch dem bereits genannten zu, dass dies nicht unbedingt nötig ist und eigentlich unnötiger Aufwand

passt schon, da der allgemeine tenor diesbezüglich eindeutig ist, komme ich durchaus damit klar diesen nicht zu schließen :D

danke trotzdem für deine antwort, auch an die anderen für eure hilfe :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
D Scanner Java Basics - Anfänger-Themen 2
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
H Scanner nextLine() bringt Dateipfad Java Basics - Anfänger-Themen 1
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
I Scanner Loop Java Basics - Anfänger-Themen 1
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
D Java Scanner Java Basics - Anfänger-Themen 9
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
I Scanner auf 10 Stellen begrenzt? Java Basics - Anfänger-Themen 5
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
O POI Apache sheet scanner Java Basics - Anfänger-Themen 1
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
M Scanner class Java Basics - Anfänger-Themen 6
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
R scanner in String funktioniert nicht Java Basics - Anfänger-Themen 1
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
A InputMismatchException mit Scanner Java Basics - Anfänger-Themen 6
J scanner, String einlesen und vergleichen Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben