Wie schließe ich einen scanner in java?
Immer wenn ich den folgenden code ausführen,
private static String input(String Message){
Scanner input_scanner = new Scanner(System.in);
System.out.print("\n" + Message);
String string = input_scanner.nextLine();
input_scanner.close();
return string;
}
Bekomme ich diesen Fehler:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at main.learn.input(learn.java:25)
at main.learn.main(learn.java:13)
Dachte ich, es war etwas mit der Leitung zu tun input_scanner.close();
aber wenn ich es entfernen, ich bekomme Warnungen, die sagen:
Resource leak: "input_scanner" ist nie geschlossen"
Ist es trotzdem kann ich halt die Fehler passiert und loszuwerden, die Warnungen?
Ich glaube nicht, können Sie mehrere Scanner verwenden mit
System.in
zuverlässig. Wenn Sie es schließen, dann schließen Sie System.in
... wenn du nicht, dann der zweite Scanner, den Sie erstellen, vielleicht nicht Anfang, wo der erste aufgehört hat (weil die erste möglicherweise gepuffert einige Zeilen)InformationsquelleAutor William Smith | 2015-04-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie prüfen, ob Sie Daten zu konsumieren, für Scanner mit
hasNextLine
- api, die Sie könnte wie:InformationsquelleAutor SMA
Nun, zuerst empfehle ich Ihnen die Nutzung der API zu verstehen, die Ausnahmen, die Java zeigt.
Lesen Sie diese für weitere Informationen über NoSuchElementException:
http://docs.oracle.com/javase/7/docs/api/java/util/NoSuchElementException.html
Wenn Sie scanner, stringTokenizer, Iteratoren... Sie haben zu stellen Sie sicher, dass Sie mehr Elemente zu Lesen, bevor Sie versuchen, Sie Lesen. Wenn Sie das nicht tun, können Sie diese Art von Ausnahmen.
Wenn Sie mehr Lesen wollen als nur eine Zeile, verwenden Sie
while (input_scanner.hasNextLine())
Dein Fehler ist über die Tastatur-Eingabe. Lesen Sie diese zu verstehen, wenn es dir gut geht, das Teil:
http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextLine%28%29
PS: wird empfohlen, um zu schließen Sie Ihren scanner mit
input_scanner.close()
wenn Sie fertig mit ihm.InformationsquelleAutor Shondeslitch
try-mit-Ressourcen, um zu garantieren, dass Ihr scanner schließt, unabhängig davon, ob Ausnahmen auftreten.
Können Sie diese mit etwas, das AutoCloseable implementiert, und es ist viel besser, als die eine Reihe von try-catch Ausnahmen beim schließen.
Closeable
sollteAutoCloseable
InformationsquelleAutor Scott Sosna
Eigentlich, da man sich mit Scanner für System.in, das bedeutet, es ist ein blockierender Aufruf, der halten wird bis zum Empfang der ersten Eingabe des Benutzers.
Wird eine lokale variable, die Sie wirklich nicht brauchen, schließen Sie den scanner, und Sie definitiv nicht brauchen Sie eine while-Schleife für hasNextLine();
InformationsquelleAutor Nicolas El Khoury
Einen scan-Vorgang blockieren können und auf eine Eingabe wartet. Wenn keine Eingaben empfangen werden, dann wird das scanner-Objekt nicht gelesen, das macht die Ausnahme ausgelöst, da es nicht das element sein müssen, zu schließen. Durch die Verifizierung hat der stream bestehen, alles, was gelesen werden könnte durch das Scannen von Objekt hilft Ihnen, in immer diese Art von Ausnahme.
InformationsquelleAutor Mohan Raj