2012-01-28 38 views
5
void connect (String portName) throws Exception 
{ 
    CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); 
    if (portIdentifier.isCurrentlyOwned()) 
    { 
     System.out.println("Error: Port is currently in use"); 
    } 
    else 
    { 
     System.out.println(portIdentifier.getCurrentOwner()); 
     CommPort commPort = portIdentifier.open(this.getClass().getName(),2000); 

     if (commPort instanceof SerialPort) 
     { 
      SerialPort serialPort = (SerialPort) commPort; 
      serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); 

      InputStream in = serialPort.getInputStream(); 
      OutputStream out = serialPort.getOutputStream(); 

      (new Thread(new SerialReader(in))).start(); 
      (new Thread(new SerialWriter(out))).start(); 

     } 
     else 
     { 
      System.out.println("Error: Only serial ports are handled by this example."); 
     } 
    }  
} 

está dandognu.io.PortInUseException: ¿Aplicación desconocida?

gnu.io.PortInUseException: Unknown Application 
    at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:354) 

estoy usando RXTX con Java en Windows 7 Home 64 bits.

Respuesta

3

Reinicia el sistema/deshabilita el puerto.
El problema real es cuando el programa ejecuta el puerto se abre y no se cierra después de que el programa termina.
funciona.

2

Me encontré con este problema porque el puerto era realmente en uso. Una instancia anterior de javaw.exe apareció en el administrador de tareas de Windows, que acaparó el puerto.

La razón por la cual el proceso anterior de Java se colgó fue un problema de hardware: al conectar el convertidor de la serie USB-2 que utilicé en un puerto USB-2, todo funcionó bien. Cuando se conecta a un puerto USB-3, el código RXTX CommPortIdentifier se bloquea y, a continuación, las instancias posteriores de Java reciben la PortInUseException.

12

Compruebe que la carpeta/var/lock exista en su máquina.

 

mkdir /var/lock 
chmod go+rwx /var/lock 
 
0

que utiliza el explorador de procesos de encontrar un procedimiento con el mango \Device\PCISerial0 y se cierra el mango. Si sus puertos de comunicación no están en una tarjeta PCI, el nombre podría ser diferente.

Cuestiones relacionadas