Wie set timeout im Java beim Lesen von SerialPort?

Ich bin neu in der JAVA-Programmierung. Ich wurde beauftragt mit der Aufgabe schreiben Sie ein JAVA-GUI-Anwendung, wird die Interaktion mit externen Geräten über den seriellen port. Ich habe es geschafft, meinen code kompilieren und ausführen mit jSSC (Java Simple Serial Connector) - Paket unter Mac OS X und Win32-Plattform. Die jSSC Projekt bietet anständige sample-codes und es ist ziemlich einfach zu implementieren, die mit javax.comm-Stil SerialPortEventListener-Schnittstelle.

Aber bald habe ich gelernt, ich hätte hinzufügen müssen "ACK timeout" - Funktion, um meine Anwendung zur Fehlervermeidung. In der C-Sprache dies kann leicht erreicht werden mit select () - API-Aufruf mit dem 5. parameter einstellen, um die gewünschte Dauer dynamisch. Aber in JAVA habe ich keine einzige Ahnung, wie es zu tun.

Sollte ich setup eine andere Zeit, Faden und Feuer-timer-generierte Ereignis durch direktes aufrufen der serialEvent () - Methode ? Es kann dazu führen, dass einige racing condition though.


(03/27 10:43 Edit): OK, ich habe zurückverfolgt source-code von jSSC. Es schien, dass jSSC erzeugt nur eine neue Runnable thread in JVM, wenn ein Listener registriert ist; und dieser thread wird laufend status mit native Funktion aufrufen, die invoke-system-api-Aufrufe von ioctl(). So wäre es unmöglich, hinzufügen timeout-Ereignis ohne änderung der nativen Bibliothek.

Denke, dass ich die Art und Weise ändern, die für serial port event handling. Ich werde brauchen zu erstellen eine andere Runnable thread zu verarbeiten die eingehenden Daten verarbeiten, anstatt direkt zu analysieren, Daten in serialEvent () - Methode aufrufen, von jSSC-event-thread. Und ich kann das setup ein timer zu werfen timeout-Ereignis in diesem thread.

Ich diesem Fall, ich brauche, um das setup ein event-dispatching thread, genau wie SwingUtility.invokelater(). Aber ich habe keine Ahnung, ob ich das umsetzen sollte man von unten nach oben, oder kann ich einfach die AWT EDT zu behandeln.

Kann jemand mir einige Ratschläge geben ?

InformationsquelleAutor RichardLiu | 2012-03-26
Schreibe einen Kommentar