Thread unterbrechen, nicht beenden blockierenden Aufruf auf die Eingabe-stream Lesen

Ich bin mit RXTX zum Lesen von Daten von einem seriellen port. Die Lesung ist getan innerhalb ein thread erzeugt, in der folgenden Art und Weise:

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(port);
CommPort comm = portIdentifier.open("Whatever", 2000);
SerialPort serial = (SerialPort)comm;
...settings
Thread t = new Thread(new SerialReader(serial.getInputStream()));
t.start();

Den SerialReader-Klasse implementiert Runnable und einfach Schleifen auf unbestimmte Zeit, Lesung aus dem Hafen und der Konstruktion der Daten in sinnvolle Pakete vor dem senden Sie es aus, um andere Anwendungen. Ich habe allerdings reduziert Sie sich auf die folgenden der Einfachheit halber:

public void run() {
  ReadableByteChannel byteChan = Channels.newChannel(in); //in = InputStream passed to SerialReader
  ByteBuffer buffer = ByteBuffer.allocate(100);
  while (true) {
    try {
      byteChan.read(buffer);
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}

Wenn ein Benutzer klickt auf eine Schaltfläche beenden, wird die folgende Funktionalität feuert das sollte in der Theorie schließen die Eingabe-stream und brechen aus der Sperrung byteChan.read(buffer) aufrufen. Der code ist wie folgt:

public void stop() {
  t.interrupt();
  serial.close();
}

Allerdings, wenn ich diesen code ausführen, bekomme ich nie eine ClosedByInterruptException, SOLLTE das Feuer einmal den input-stream schließt. Darüber hinaus die Ausführung der Blöcke auf den Aufruf von serial.close () - weil das zugrunde liegende input-stream ist immer noch blockiert, die auf der read aufrufen. Ich habe versucht, anstelle der interrupt-Aufruf mit byteChan.close () sollte dann die Ursache für ein AsynchronousCloseException, aber ich bekomme die gleichen Ergebnisse.

Jede Hilfe auf das, was mir fehlt, wäre sehr dankbar.

InformationsquelleAutor JDS | 2010-10-01
Schreibe einen Kommentar