在java中,如何检测设备何时关闭了串行端口?

在java中,如何检测设备何时关闭了串行端口?,java,serial-port,rxtx,Java,Serial Port,Rxtx,我目前正在使用RXTX在我的java程序中处理串行通信,我已经成功地连接/断开和读/写了 然而,我还不能确定RXTX中是否有一种方法可以检测设备是否在其一端断开连接。在不轮询串行端口的情况下,如何检测此事件?因为如果它在轮询之间断开连接并重新连接,则不会被检测到,但在使用串行端口时仍会导致错误 如果在RXTX中不可能,是否建议使用任何库来检测断开连接事件 说明:该设备通过USB连接,并注册为串行设备。设备复位或关闭时可能会断开连接。当它复位时,串行端口瞬间关闭,连接RXTX无效 感谢您的帮助我遇

我目前正在使用RXTX在我的java程序中处理串行通信,我已经成功地连接/断开和读/写了

然而,我还不能确定RXTX中是否有一种方法可以检测设备是否在其一端断开连接。在不轮询串行端口的情况下,如何检测此事件?因为如果它在轮询之间断开连接并重新连接,则不会被检测到,但在使用串行端口时仍会导致错误

如果在RXTX中不可能,是否建议使用任何库来检测断开连接事件

说明:该设备通过USB连接,并注册为串行设备。设备复位或关闭时可能会断开连接。当它复位时,串行端口瞬间关闭,连接RXTX无效


感谢您的帮助

我遇到了同样的问题:我试图知道设备何时从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);
            }

        }
    }
}  
我使用的唯一事件是:

serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);

这是我看到的检测断开(物理)事件的方式。

取决于您所说的“断开”是什么意思。你的意思是物理/电的?这可能会导致一条或多条线路(DCD、DTR、DSR、RTS、CTS)上的电平变化,但这取决于很多因素(即,是否实际使用了这些线路,因为实际上不需要这些线路)。我强烈怀疑“断开连接”的概念定义不清,原则上可能无法检测到,除非您使用的是提供它的物理层协议(即DCD)据我所知,您必须手动检查设备是否连接到串行端口。我尝试过,但在我的情况下,它不起作用…我添加了eventListener并将onData设置为true…但当我断开设备连接时,将不会调用该方法。。
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);