Wie interrupt-java.util.Scanner nextLine-call

Ich bin mit einer multi-threaded Umgebung wurden ein Thread wird ständig überwacht Benutzereingaben durch mehrmalige scanner.nextLine().
Um die Anwendung zu beenden, diese runloop wird beendet, indem ein anderer thread, aber der listening-thread wird nicht aufhören, bis einer der letzten Benutzer-Eingabe gemacht wurde (aufgrund der Sperrung Art der nextLine()).

Schließen des Streams scheint nicht eine option, da ich das Lesen von System.in gibt eine InputStream ist nicht schließbar.

Gibt es eine Möglichkeit zu unterbrechen, die Sperrung des Scanners, so dass es zurückkehren wird?

Dank

  • Sie können rufen Sie scanner.hasNext() statt scanner.nextLine() diese Methode kann block entsprechend der javadoc, so müssen Sie möglicherweise, damit umzugehen. Die Idee ist, dass im Gegensatz zu scanner.nextLine(), scanner.hasNext() nicht im Voraus den Eingang, so dass Sie überprüfen können, eine Flagge wenn das Lesen-thread gestoppt wurde, durch einen anderen thread vor dem Aufruf scanner.nextLine()
  • ja, aber das würde bedeuten, Konstante polling.
  • Sie sollten in der Lage sein zu rufen Thread.interrupt auf der listening-thread, würde dies verursachen, eine InterruptedIOException können Sie von der ioException () - Methode. Nicht sicher, wie es interagiert mit nextLine - () oder wenn es funktioniert mit Ihrer zugrunde liegenden inputstream, aber es sollte kündigen nextLine-in den meisten Fällen.
  • Nach meinen Tests, die eigentlich gar nicht kündigen nextLine - immer. Zumindest nicht für mich.
InformationsquelleAutor j-pb | 2011-02-13
Schreibe einen Kommentar