ich habe bei untenstehendem Code das Problem, dass ich zwar meine Eingabe machen kann. Danach erhalte ich aber sofort die folgende Exception:
Zitat
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162)
at java.io.BufferedInputStream.read(BufferedInputStream.java:325)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at helpers.IO.readString(IO.java:28)
at parser.Main.readNewPersonFromConsole(Main.java:23)
at parser.Main.main(Main.java:58)
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162)
at java.io.BufferedInputStream.read(BufferedInputStream.java:325)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at helpers.IO.readString(IO.java:28)
at parser.Main.readNewPersonFromConsole(Main.java:23)
at parser.Main.main(Main.java:58)
Die Exception wird durch den ersten catch-Block geworfen. Ich kann mir nur nicht ganz erklären warum. An der Stelle sollte der Stream doch noch offen sein.
/** * Input.class * @author hmk */ /** * Einlesen eines Strings von der Console * @throws IOException */ public static String readString() { String s = null; BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(System.in)); s = in.readLine(); } catch (IOException ioe) { // TODO Auto-generated catch block ioe.printStackTrace(); } finally { try { if (in != null) in.close(); } catch (IOException ioe) { // TODO Auto-generated catch block ioe.printStackTrace(); } } return s; }
Der Aufruf des Codes erfolgt aus meiner main()-Methode heraus mit folgendem Code (nichts besonderes eigentlich):
System.out.print("Bitte geben Sie einen Nachnamen für die neu anzulegende Person an: "); newPerson.setName(Input.readString()); System.out.print("Bitte geben Sie einen Vornamen für die neu anzulegende Person an: "); newPerson.setVorname(Input.readString());Bei der zweiten Abfrage habe ich bereits gar keine Möglichkeit mehr irgendwas einzugeben. Da wird die gleiche Exception sofort geworfen.
Den Code für die Eingabe, also die Input.class, habe ich mir zwar selbst zusammengeschrieben, aber in ähnlichen Formen schon mehrfach als "best practice" gefunden.
Irgendwelche Ideen warum das nicht so funktioniert wie ich mir das denke?
Viele Grüße,
skaven