Error bei Scanner - woher?

TheMenox

Aktives Mitglied
Ein neuer Tag, ein neues Problem -.-
Folgender Code hat gestern noch einwandfrei funktioniert:
Java:
package de.panjutorialsskillstest.java;

import java.util.Scanner;

public class PanjutorialsSkillsTest {

    public static void main(String[] args) {     
        declaration();     
        int A1 = inputhandling("A1");
        int A2 = inputhandling("A2");
        int B1 = inputhandling("B1");
        int B2 = inputhandling("B2");
        outputresult(A1, A2, B1, B2);
    } 
 
    public static void declaration(){ 
        System.out.println("Folgende Situation: Wir haben 2 Gruppen A und B mit jeweils 2 Personen 1 und 2.");
        System.out.println("Von diesen beiden Gruppen wollen wir jeweils das Gesamtalter bestimmen und herausfinden, welche Gruppe insgesamt älter ist.");
        System.out.println("Dazu musst du nun nacheinander das Alter von allen 4 Personen eingeben und mit 'Enter' bestätigen.");
    }
 
    public static int inputhandling(String Person){     
        System.out.println("Alter von Person " + Person + " bitte:");
        Scanner Input = new Scanner(System.in);
        int inputAge = Input.nextInt();
        while (true){
            if(inputAge < 0)
                System.out.println("Das von dir für Person " + Person + " eigegebene Alter ist ungültig. Bitte gib ein Neues ein.");
            else{
                Input.close();
                return inputAge;
            }
        }
    }
 
    public static void outputresult(int A1, int A2, int B1, int B2){     
        System.out.println("Das Gesamtalter von Gruppe A ist " + totAge(A1, A2) + " Jahre.");
        System.out.println("Das Gesamtalter von Gruppe B ist " + totAge(B1, B2) + " Jahre.");
        if (totAge(A1, A2) > totAge(B1, B2)){
            System.out.println("Gruppe A ist insgesamt " + totAgeDiff(totAge(A1, A2), totAge(B1, B2)) + " Jahre älter als Gruppe B.");
        }else if (totAge(A1, A2) < totAge(B1, B2)){
            System.out.println("Gruppe B ist insgesamt " + totAgeDiff(totAge(A1, A2), totAge(B1, B2)) + " Jahre älter als Gruppe A.");
        }else{
            System.out.println("Gruppe A und Gruppe B sind insgesamt gleich alt.");
        }
    }
 
        public static int totAgeDiff (int totAgeA, int totAgeB) {     
            return Math.abs(totAgeA - totAgeB);
        }
 
        public static int totAge (int Age1, int Age2) {     
            return Age1 + Age2;
        }
}

Heute spuckt mir die Konsole nach Ausgabe von "Alter von Person A2 bitte:" folgende Fehler aus:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at de.panjutorialsskillstest.java.PanjutorialsSkillsTest.inputhandling(PanjutorialsSkillsTest.java:39)
at de.panjutorialsskillstest.java.PanjutorialsSkillsTest.main(PanjutorialsSkillsTest.java:24)

Zeile 24:
Java:
int A2 = inputhandling("A2");
Zeile 39:
Java:
int inputAge = Input.nextInt();
Ich verstehe beim besten Willen nicht, warum der mir auf einmal diesen Fehler ausspuckt, vor Allem, weil das gestern exakt so noch funktioniert hat.
Immerhin habe ich herausgefunden, dass es funktioniert, wenn ich den Scanner "Input" am Ende der while Schleife nicht schließe, also wird das Problem denke ich mal das sein, dass der Scanner nicht wieder richtig geöffnet werden kann, warum auch immer.
Bitte um Hilfe, ich verzweifle!
LG TheMenox
 

TheMenox

Aktives Mitglied
@fhoffmann klingt logisch, aber warum kann die dann nicht wieder geöffnet werden? Und wird der Scanner nicht durch das beenden der Methode durch das return sowieso geschlossen, auch wenn Eclipse was anderes sagt? Oder gibt es eine andere Möglichkeit, den Scanner zu schließen, ohne dass das Programm abstürzt?

@JStein52 ja ich glaube fast auch :D ich war mir zwar ziemlich sicher, dass so schon ausgeführt zu haben aber vllt hab ich mir das auch nur eingebildet, es war immerhin schon 3 Uhr oder so xD
 
K

kneitzel

Gast
Also das Problem ist, dass System.in nicht von dir geöffnet wurde und daher solltest Du es auch nicht schließen. System.in ist nicht wieder einfach so zu öffnen.

Lösungen, die ich sehe:
- So wie Du ein System.in verwendest könntest Du auch einen Scanner verwenden. Dazu könntest Du den Scanner z.B. in Deiner Hauptklasse von Deiner Applikation als Instanzvariable führen.
- Du könntest auch einfach ein Singleton Pattern verwenden um dann so eine universelle Klasse zu haben, von der Du immer einen Scanner bekommen kannst.

Konrad
 

JStein52

Top Contributor
Warum nicht schlicht und einfach das
Code:
Input.close();
weglassen ? Er erzeugt sich sowieso immer wieder einen neuen Scanner in seiner Methode.
 
K

kneitzel

Gast
Anfang war ja ein anderer Thread, in dem ja moniert wurde, dass die Warnung kommt, dass der Scanner nicht geschlossen wird.

Ist halt die Unterstützung für den Entwickler, dass bei lokalen Variablen, die Closable implementieren auch auf das Schließen geachtet wird.

Konrad
 
K

kneitzel

Gast
Also die Scanner Klasse implementiert Closable:
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
Code:
All Implemented Interfaces:
Closeable, AutoCloseable, Iterator<String>

Und ich denke mal, dass es eine Frage der IDE ist. Der Java Compiler und IntelliJ haben bei mir auch keine solche Warnung gegeben.

Was mich jetzt aber ehrlich etwas ärgert. Das ist eine Standard Code Analysis Warnung und da muss ich einmal schauen, wie ich die in IntelliJ ggf. aktivieren kann oder was für Tools sich da integrieren lassen.
(Ich bin beruflich ja im .Net Umfeld unterwegs und bei uns im Team ist die CodeAnalysis Komponente immer aktiv. Einige Warnungen werden einfach ignoriert, aber das ignore-File fliegt vor Code-Reviews immer erst raus und dann wird alles erneut bewertet.)

Aber da hast Du evtl. mehr Erfahrung und kannst mir da auch ein paar Tipps geben bezüglich Code Analyssis Tools für Java.

Konrad
 

JStein52

Top Contributor
Nö, das was du da schreibst ist schon ok so. Mehr kenne ich eigentlich auch nicht. Ich benutze NetBeans und unterdrücke eigentlich auch keine Warnungen.
Und Rheinwerk ist da scheinbar nicht so ganz vollständig :):)
 

TheMenox

Aktives Mitglied
@kneitzel so wie ich das mit Video Tutorial gelernt habe verwende ich einen Scanner, der "System.in", also die Konsoleneingabe scannt. Und außerdem dachte ich, dass ich mit "Input.close();" nur den Scanner schließe, und nicht "System.in"... Der Rest von deinem Vorschlag ist für mich momentan leider unverständlich, da mir dafür schlicht und einfach das Wissen/Können fehlt :D

Und wird der Scanner nicht durch das Beenden der Methode (durch "return") mit beendet/geschlossen, so dass die Warnung, er würde "never closed" sein, eigentlich überflüssig ist? Und falls nicht, gibt es eine andere Möglichkeit den zu schließen?
 

JStein52

Top Contributor
Gemeint war dass du deinen Scanner nicht in der "inputhandling"-Methode anlegst sondern so:

Code:
    static Scanner Input = new Scanner(System.in);
      
    public static void main(String[] args) {

als Klassenvariable deiner Klasse.
 

JStein52

Top Contributor
Gemeint war dass du deinen Scanner nicht in der "inputhandling"-Methode anlegst sondern so:

Code:
    static Scanner Input = new Scanner(System.in);
      
    public static void main(String[] args) {

als Klassenvariable deiner Klasse.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
A Scanner-Error Java Basics - Anfänger-Themen 8
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
monsterherz error: <identifier> expected Java Basics - Anfänger-Themen 2
R Compiler-Fehler identifier error? Java Basics - Anfänger-Themen 3
N Compiler-Fehler Not a statement Error Java Basics - Anfänger-Themen 7
richrich99 error: illegal start of expression Java Basics - Anfänger-Themen 10
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
N Compiler-Fehler State Machine - Compiler Error Java Basics - Anfänger-Themen 48
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
H Versteht jemand diesen Codewars Error? Java Basics - Anfänger-Themen 8
J Fehlermeldung: A JNI error Java Basics - Anfänger-Themen 3
Gaudimagspam Compiler Error Java Basics - Anfänger-Themen 3
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
B Methoden if-statement error, FX, Fehlermeldung Java Basics - Anfänger-Themen 6
K Error bei meinem Programm - Hilfe Java Basics - Anfänger-Themen 8
Elyt Error: incompatible types Java Basics - Anfänger-Themen 3
I Client ObjectInputStream error... Java Basics - Anfänger-Themen 5
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
C error: <identifier> expected Java Basics - Anfänger-Themen 13
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
N Methoden Unerklärliche Error Meldung Java Basics - Anfänger-Themen 3
ZH1896ZH Datentypen Error bei For-Schleife Java Basics - Anfänger-Themen 2
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
Z Klassen Error: ';' expected - was mache ich falsch? Java Basics - Anfänger-Themen 4
9 Error bei .split() Java Basics - Anfänger-Themen 2
L Operatoren error: bad operand types for binary operator && Java Basics - Anfänger-Themen 8
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
F Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 5
L SQLITE - Syntax error Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
F Ausdruck wirft unerwarteten Error Java Basics - Anfänger-Themen 2
T Unverständlicher Launch-Error Java Basics - Anfänger-Themen 11
L Bluej Error: Cannot find Symbol Java Basics - Anfänger-Themen 13
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
T Error: int cannot be dereferenced Java Basics - Anfänger-Themen 10
D Datentypen Datentyperstellung | Kompiler sagt Syntax Error doch ich find keine Lösung Java Basics - Anfänger-Themen 2
J Syntax error on token ";",, expected Java Basics - Anfänger-Themen 2
W double*double error Java Basics - Anfänger-Themen 4
C Compiler-Fehler No such Field error Java Basics - Anfänger-Themen 20
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
C Erste Schritte Syntax Error Java Basics - Anfänger-Themen 23
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
H Compiler-Fehler error not a statement Java Basics - Anfänger-Themen 2
N Error bei eingabe eines Punktes Java Basics - Anfänger-Themen 1
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
Chr1s Interpreter-Fehler Error Fehlercode Java Basics - Anfänger-Themen 7
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
J Error: cannot find symbol - variable Java Basics - Anfänger-Themen 3
S Compiler-Fehler error: ';' expected (finde Fehler nicht) Java Basics - Anfänger-Themen 10
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
1 Bei if-Anweisung: Syntax error on token Java Basics - Anfänger-Themen 5
D Übung Felder java Error kompilieren Java Basics - Anfänger-Themen 4
Joew0815 Error org.apache.xmlrpc.client.XmlRpcClientConfigImpl.setUserAgent Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
C Exception Error Java Basics - Anfänger-Themen 15
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
B Not a statement error Java Basics - Anfänger-Themen 2
D error: cannot find symbol Java Basics - Anfänger-Themen 3
B Frage zu Beispielprogramm: "error: cannot find symbol" Java Basics - Anfänger-Themen 2
F java Ip ping + Dateiausgabe error ! Java Basics - Anfänger-Themen 3
O Exception Error Java Basics - Anfänger-Themen 3
BlueMountain Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 2
B Printf führt zu Error. Java Basics - Anfänger-Themen 8
P Fatal Error [...] librxtxSerial.so Java Basics - Anfänger-Themen 2
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
L Error: Cannot find symbol Java Basics - Anfänger-Themen 1
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
B Compiler-Fehler 86:11: error: ';' expected obwohl kein ";" hingehört! Java Basics - Anfänger-Themen 10
K Java-Editor: "Starten" bringt Error Java Basics - Anfänger-Themen 15
N Error "unreachable Code" Java Basics - Anfänger-Themen 7
A error: incompatible types Java Basics - Anfänger-Themen 9
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
B Error vs Runtime exception Java Basics - Anfänger-Themen 4
W Variablen While-Error Java Basics - Anfänger-Themen 6
N Operatoren JSpinner und + Error Java Basics - Anfänger-Themen 21
M Java Arbeitsspeicherverbrauch, Heap Space error korrigieren? Java Basics - Anfänger-Themen 18
D Error bei addView Java Basics - Anfänger-Themen 4
M Syntax error on token ";", { expected after this token Java Basics - Anfänger-Themen 3
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Erste Schritte eclipse syntax error token Java Basics - Anfänger-Themen 5
vandread String.split("\\") führt zu Error?! Java Basics - Anfänger-Themen 8
G Fehlermeldung: A fatal error has been detected by the Java Runtime Environment Java Basics - Anfänger-Themen 7
B Compiler-Fehler import java.io.*; führt zu error Java Basics - Anfänger-Themen 2
S Syntax Error - source level Java Basics - Anfänger-Themen 12
L bean error bei glassfish deploy Java Basics - Anfänger-Themen 2
B Syntax error Java Basics - Anfänger-Themen 6
K Error: java.lang.NoSuchMethodException Java Basics - Anfänger-Themen 2
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben