我有同樣的問題:我是想知道,當設備從USB端口拔掉。 然後,我發現每當我從USB端口拔下設備時,它都會從serialEvent中獲得一個java.io.IOException。看看下面我的serialEvent代碼:
@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);
}
}
}
}
即使我沒有在那一刻接收數據,我仍然得到java.io.IOException的;這裏是異常跟蹤:
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);
這是我看到的檢測斷開(物理)事件的方式。
取決於「斷開」的含義。你的意思是身體/電力?這可能會導致一行或多行(DCD,DTR,DSR,RTS,CTS)上的電平變化,但這取決於很多事情(即,實際上正在使用這些行中的任何一行,因爲實際上並不需要這些行)。我強烈懷疑「斷開連接」的概念是不明確的,原則上可能無法檢測到,除非您使用的物理層協議(即DCD) –
,據我所知,您必須手動檢查是否設備連接到串行端口。 –