2010-01-26 2 views
3

Я использую rxtx для обработки последовательного ввода-вывода на Java с FTDI2232H, который обеспечивает USB-коммуникационный порт. Он отлично работает, но с одним исключением: если я отключаю кабель USB, так что COM-порт исчезает во время выполнения, он извергает исключения слева и справа:java serial I/O: обработка последовательного соединения/разъединения USB надежным способом

java.io.IOException: No error in nativeavailable 
at gnu.io.RXTXPort.nativeavailable(Native Method) 
at gnu.io.RXTXPort$SerialInputStream.read(RXTXPort.java:1427) 
at gnu.io.RXTXPort$SerialInputStream.read(RXTXPort.java:1339) 

и снова, когда я снова подключите кабель, его не восстанавливается.

Есть ли способ заставить rxtx нормально работать с подключением/отключением USB-коммуникационного порта? (Я пытался отправить сообщение в список рассылки rxtx, но по какой-то странной причине я не могу отправлять сообщения, хотя я подписался на этот список. Я отправил по электронной почте администратору списка и не получил ответа.)

Если нет, , существует ли еще одна последовательная платформа ввода-вывода?

+0

С запуском этой проблемы я переключился на [PureJavaComm] (http: // www .sparetimelabs.com/purejavacomm/purejavacomm.php) и использовали его в течение нескольких лет без каких-либо проблем. Я отказался от использования RXTX; он более не поддерживается. [NRJavaSerial] (https://github.com/NeuronRobotics/nrjavaserial) является поддерживаемой версией RXTX - не пробовал это в последние несколько лет. –

ответ

0

По его словам, я не знаю, возможно ли это на Java, но есть сообщение Windows, которое транслируется - сообщение WM_DEVICECHANGE. Вероятно, вам нужно перехватить это сообщение, и если это изъятие устройства, изящно закрывает код rxtx. Вот пример code, чтобы проверить на вставку/удаление CD в дисковод CDROM (это не на Java).

Редактировать: Добавлена ​​другая ссылка here что может заинтересовать.

Надеюсь, это поможет, С уважением, Tom.

0

хорошо. мы используем WM_DEVICECHANGE и закодированы в C++ и подготовили DLL, а затем получили доступ к нему через JNI из приложения JAva .. поэтому мы получаем уведомление о подключении и отключении