2016-06-25 11 views
0

Ich verwende rxtx, um eine Verbindung zu einem seriellen Port herzustellen. Alles funktioniert gut, aber es gibt ein Problem, das ich nicht lösen kann.Java-Fehler beim Trennen des Geräts vom COM-Port

Sobald verbunden und lesen, gibt es die Möglichkeit, dass die Benutzer das Gerät trennen (ja ... Benutzer ...). Wenn dies geschieht, bekomme ich folgende Fehlermeldung:

enter image description here

ich keine Ausnahme erhalten, es tötet nur Java SE (java.exe). Wenn ich eine Ausnahme erhalten würde, würde ich einfach entsprechend handeln, aber in diesem Szenario funktioniert meine App nicht mehr und ist geschlossen.

Ich benutze InputStream, um von der seriellen Schnittstelle zu lesen. InputStream input = serialPort.getInputStream();

Ich denke, das Problem ist, dass der Stream geöffnet ist und es nicht erkennt, wenn das Gerät geschlossen ist. Es passiert, wenn ich mit dieser Zeile lese:
byte singleData = (byte) input.read();

Ich konnte keine Methode finden, die mir helfen würde, den Zustand vor dem Lesen zu testen. Auch wenn ich nicht lesen (oder mit dem InputStream arbeiten), nach ein paar Sekunden tritt der Fehler trotzdem auf (ich denke jemand versucht, die Eingabe oder etwas zu schließen).

Wie bekomme ich dieses Ereignis (Gerät nicht angeschlossen)? Wie soll ich den Port und den Eingabestream schließen?

Vielen Dank im Voraus.

+1

Bitte keine Links zu externen Informationen veröffentlichen. Links werden schlecht. Ihre Frage sollte in sich geschlossen sein, damit sie auch in Zukunft ihren Wert behält. Der Fehler, den Sie sehen, liegt wahrscheinlich im C-Code, der der Java-Bibliothek zugrunde liegt (über JNI). Dies ist wahrscheinlich ein Fehler in RXTX. Der beste Ort, um Hilfe zu erhalten, wäre wahrscheinlich die [RXTX Github Site] (https://github.com/rxtx/rxtx). –

+0

Jim, danke für deine Antwort. Stackoverflow ließ mich das Bild nicht posten, gab mir nur diese Option. Ich suche deinen Link. Ich lasse diese Frage trotzdem und hoffe, dass mir jemand helfen kann. – Damian

Antwort

-1

Ich bevorzuge jssc Bibliothek und nicht rxtx. Sie können versuchen ... catch Block, um den Schwarm zu vermeiden.

+0

Probieren/was genau? – EJP

+0

Mit einem try/catch-Block können Sie die seriellen Port-Event-Tasks ausführen, um Daten vom Port zu lesen oder Daten zum Port zu schreiben. Der try-Block enthält den Code zum Lesen oder Schreiben von Daten. Und der catch-Block behandelt die Ausnahmen wie die Unterbrechung des Lesens oder Schreibens von Daten, so dass das Programm nicht abstürzt. Außerdem können Sie das Programm effizienter machen, indem Sie einen Thread zusammen mit try/catch verwenden, der überwacht, ob der serielle Port verbunden ist oder nicht, ob er aus bestimmten Gründen nicht verbunden ist oder nicht. Und es wird das Programm nicht zum Absturz bringen. (Entschuldigung für die verspätete Antwort, da ich nicht in Kontakt war) –

Verwandte Themen