2013-07-26 4 views
6

현재 Java 프로그램에서 직렬 통신을 처리하기 위해 RXTX를 사용하고 있으며 성공적으로 연결/연결 해제 및 읽기/쓰기가 가능했습니다.Java에서 장치가 직렬 포트를 닫았을 때 어떻게 감지합니까?

그러나 RXTX에서 장치의 연결이 끊어지면이를 감지하는 방법이 있는지 알 수는 없습니다. 직렬 포트를 폴링하지 않고이 이벤트를 어떻게 감지합니까? 폴링을 끊고 다시 연결하면 감지되지 않지만 직렬 포트가 사용될 때 여전히 오류가 발생합니다.

RXTX에서 불가능한 경우 연결 끊기 이벤트를 감지 할 수있는 라이브러리가 있습니까?

설명 : 장치가 USB를 통해 연결되고 직렬 장치로 등록됩니다. 장치가 재설정되거나 꺼지면 장치의 연결이 끊어 질 수 있습니다. 재설정하면 직렬 포트가 일시적으로 닫히고 RXTX 연결이 무효화됩니다. 어떤 도움

+2

"연결 해제"의 의미에 달려 있습니다. 물리적/전기적 의미입니까? 이는 하나 이상의 회선 (DCD, DTR, DSR, RTS, CTS)에서 레벨 변경을 유발할 수 있지만, 이는 많은 것들 (실제로 사용되는 라인이 실제로는 필요하지 않기 때문에 실제로 사용되는 라인)에 따라 달라질 수 있습니다. 나는 강력하게 "연결 끊김"개념이 잘못 정의 된 것으로 의심하며 원칙적으로 물리적 레이어 프로토콜 (DCD) –

+0

을 제공하지 않는 한 수동으로 검사해야하는지 장치가 직렬 포트에 연결되어 있습니다. –

답변

1

에 대한

덕분에 저도 같은 문제가 : 나는 장치가 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); 

이 내가 분리 (물리적으로) 이벤트를 감지 볼 수있는 방법입니다.

관련 문제