javax.comm: Ошибка при отключении устройства
У меня есть приложение, которое читает данные из com-порта, используя javax.comm.
Проблема у меня заключается в том, что если устройство, с которого я читаю, неожиданно отключается, в консоли появляется сообщение об ошибке "WaitCommEvent: Ошибка 5"
Я осмотрелся и не могу найти никакой полезной информации об этом. Я установил для всех методов notifyOn* значение true, поэтому я думаю, что должен получать все события, но я не перехватываю это.
Распечатанное сообщение об ошибке не появляется нигде в моем коде, поэтому оно должно быть где-то в пакете javax.comm. Может кто-нибудь сказать мне, как обработать эту ошибку, чтобы я мог правильно закрыть com-порт, когда это происходит?
Спасибо!
3 ответа
Если кто-то заинтересован в этом, я нашел решение. Я использовал javax.comm api, но для решения проблемы я заменил его на rxtx api ( http://rxtx.qbang.org/wiki/index.php/Main_Page). Никаких изменений кода не потребовалось, но теперь, когда устройство отключено, я получаю IOException с сообщением "Базовый поток ввода возвратил ноль байтов". Я обрабатываю это сообщение и запускаю новую тему. В новом потоке я вызываю port.close() и port.removeEventListener(). Эти два вызова должны быть выполнены в новом потоке, иначе приложение зависнет.
Этому вопросу почти 2 года, но, возможно, еще один нуждается в возможном решении:
У меня была такая же проблема с java.comm: "WaitCommEvent: Ошибка 5" Это сообщение появляется несколько раз, если COM-порт отключен, но объект SerialPort не закрыт.
Моим решением было закрыть объект SerialPort, если чтение / запись потоков ввода-вывода SerialPort вызвала исключение.
Мы потратили много времени на то, чтобы заставить javax.comm работать, и обнаружили, что в нашем случае это был драйвер COM, который вызывал проблемы (на нескольких компьютерах с Windows 7). Если драйвер также является вашей проблемой, и вы используете Windows 7 или, возможно, Vista (и вы используете кабель Seriel Prolific/Logilink), то это может быть решением:) http://www.akosta.dk/category/technical-notes/
Надеюсь, вы получите его на работу!