Fil d'interruption ne se termine pas appel de blocage sur les flux d'entrée lire

Je suis en utilisant RXTX pour lire des données à partir d'un port série. La lecture se fait dans un thread généré de la manière suivante:

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();

La SerialReader classe implémente Runnable et juste en boucle, la lecture à partir du port et de la construction des données utiles des paquets avant de les envoyer vers d'autres applications. Cependant, je l'ai réduite à la suite de la simplicité:

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);
    }
  }
}

Lorsqu'un utilisateur clique sur un bouton d'arrêt, les fonctionnalités suivantes feux qui devrait, en théorie, fermer le flux d'entrée et de sortir du blocage byteChan.read(buffer) d'appel. Le code est comme suit:

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

Cependant, lorsque j'exécute ce code, je n'obtiens jamais de ClosedByInterruptException, qui DOIT se déclencher une fois que le flux d'entrée se ferme. En outre, l'exécution des blocs sur l'appel à la série.close() -- parce que le sous-jacent flux d'entrée est toujours le blocage de la lecture appel. J'ai essayé de remplacer l'appel d'interruption avec byteChan.close(), qui devrait provoquer une AsynchronousCloseException, cependant, j'obtiens les mêmes résultats.

Toute aide sur ce que je suis absent serait grandement apprécié.

OriginalL'auteur JDS | 2010-10-01