ため
おかげで、私は同じ問題を抱えている:私は、デバイスがUSBポートから抜かれたときを知るしようとしていました。 次に、USBポートからデバイスを取り外すたびに、serialEventからjava.io.IOExceptionが取得されることがわかりました。以下の私のserialEventコードを見てみましょう:私はその瞬間にデータを受信していない場合でも、私はまだにjava.io.IOExceptionを得る
@Override
public void serialEvent(SerialPortEvent evt) {
if(this.getConectado()){
if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE)
{
try {
byte singleData = (byte)input.read();
if (singleData == START_DELIMITER)
{
singleData = (byte)input.read();
if(singleData == (byte)0x00)
{
singleData = (byte)input.read(); //get the length
byte[] buffer = new byte[singleData+4];
for(byte i=0x0;i<singleData;i++)
buffer[i+3] = (byte)input.read();
buffer[buffer.length-1] = (byte)input.read();
buffer[0] = START_DELIMITER;
buffer[1] = 0x00;
buffer[2] = singleData; //length
this.addNaLista(buffer);
}
}
} catch (IOException ex) {
Logger.getLogger(Comunicador.class.getName()).log(Level.SEVERE, null, ex);
/* do something here */
//System.exit(1);
}
}
}
}
を。ここで例外トレースは次のとおりです。私は使用しています
Jun 21, 2014 10:57:19 AM inovale.serial.Comunicador serialEvent
SEVERE: null
java.io.IOException: No error in readByte
at gnu.io.RXTXPort.readByte(Native Method)
at gnu.io.RXTXPort$SerialInputStream.read(RXTXPort.java:1250)
at inovale.serial.Comunicador.serialEvent(Comunicador.java:336)
at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
at gnu.io.RXTXPort.eventLoop(Native Method)
at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)
唯一のイベントは次のとおりです。
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
これは私が切断(物理的に)イベントを検出するのに見る方法です。
「切断」という言い方によって異なります。物理的/電気的な意味ですか?これは、1つ以上の回線(DCD、DTR、DSR、RTS、CTS)のレベル変更を引き起こす可能性がありますが、それは多くのことに依存します(実際には使用されていないため、私は強く疑わしい "断絶"の概念が不確定で、物理層プロトコル(すなわちDCD) –
を提供していない限り、原理的には検出できないかもしれません。デバイスがシリアルポートに接続されている。 –