В этом коде может быть несколько ошибок.
Во-первых, журнал ошибок, похоже, не соответствует коду: из журнала ошибок PCMC.java:189 должен быть вызов send (), но вместо этого он выглядит пустой строкой. Является ли код, который вы опубликовали, именно тем кодом, который вы использовали, чтобы вызвать ошибку?
Догадываясь о версии этого кода, которая вызвала ошибку, я думаю, что проблема, возможно, заключалась в повторном входе в inputtream.read (). Если конструктор PCMC зарегистрировался через serialPort.addEventListener (this), то может произойти следующая последовательность действий:
- Main вызывает PCMC.send (), который записывает сообщение, а затем блокирует входные данные sendtream.read ().
- Доступны последовательные входные данные. RXTX хочет вызвать PCMC.serialEvent (), но он заблокирован в inputtream.read (). Тогда случаются плохие вещи.
Чтобы успешно использовать RXTX, код должен либо выполнять ввод / вывод внутри serialEvent (), либо не должен быть слушателем и должен выполнять обычный блокирующий ввод / вывод. Если вы попытаетесь выполнить чтение из последовательного порта как в основной последовательности, так и в serialEvent (), скорее всего, RXTX прервется.
Третья вещь, которую я заметил: одна версия кода, которую вы разместили, возможно, пыталась закрыть последовательный порт без предварительной регистрации в качестве прослушивателя. Если вы вызываете addEventListener (), вы должны отменить регистрацию этого прослушивателя перед вызовом close () на порту.
Опять же, все мои заметки являются предположениями о версии вашего кода, который фактически генерировал журнал ошибок в посте. В будущем, пожалуйста, обязательно опубликуйте ту же версию кода, которая вызвала ошибку. Извините, если я ошибочно подумал, что код не соответствует журналу ошибок - и удачи!