2012-08-29 23 views
7

Buongiorno,RXTX non può elencare o trovare le porte sotto Windows 7 a 64 bit

sto avendo problemi con/o l'installazione RXTX su Windows 7 a 64 bit. Ho lavorato precedentemente con un sistema x86 win XP e non ho avuto problemi. Dal momento che si sta reinstallando su questo nuovo sistema per qualche ragione, rxtx non è in grado di localizzare alcuna porta. Ho provato l'installazione di rxtx, la libreria nativa a 64 bit di Cloud Hopper e l'eliminazione di tutti i file rxtx e l'avvio da zero. Si trova RXTXcomm.jar e posso esplorare i pacchetti in NetBeans ma l'implementazione sembra essere interrotta o non trovata.

Questa linea non riesce quando si esegue, ogni volta:

comPort = "COM1"; 
portId = CommPortIdentifier.getPortIdentifier(comPort); 

e lancia un NoSuchPortException.

L'elenco delle porte seriali utilizzando questo non produce nulla.

Enumeration ports = CommPortIdentifier.getPortIdentifiers(); 
String portArray[] = null; 
while (ports.hasMoreElements()) { 
    CommPortIdentifier port = (CommPortIdentifier) ports.nextElement(); 
    System.out.println(port.getName()); 
} 

Ho controllato le porte seriali sono disponibili quindi a questo punto mi chiedo se le librerie native sono semplicemente rotti per Windows 7 64 bit.

Qualcuno ha utilizzato con successo RXTX 2.2pre2 in Windows 7 64 bit?

sezione di codice Offending nel costruttore:

public SerialControl(String name, String comPort, int baudrate, int databits, String  parity, double stopbits) throws Exception { 
    int stop = 0; 
    int data = 0; 
    int par = 0; 

    this.name=name; 

    // Sanity checks and interpretation 
    if (baudrate > 115200 || baudrate < 300) { 
     System.err.println(name+": constructor(): Invalid baudrate "+baudrate); 
     throw new Exception("Invalid baudrate, " + baudrate); 
    } 

    if (databits >= 5 && databits <= 8) { 
     switch (databits) { 
      case 5: 
       data = SerialPort.DATABITS_5; 
       break; 
      case 6: 
       data = SerialPort.DATABITS_6; 
       break; 
      case 7: 
       data = SerialPort.DATABITS_7; 
       break; 
      case 8: 
       data = SerialPort.DATABITS_8; 
       break; 
      default: 
       System.err.println(name+": constructor(): Invalid data bits, switched " + databits); 
       throw new Exception("Invalid data bits, switched " + databits); 
     } 
    } else { 
     throw new Exception("Invalid data bits=" + databits); 
    } 

    if (stopbits >= 1.0 && stopbits <= 2.0) { 

     if (stopbits == 1.0) { 
      stop = SerialPort.STOPBITS_1; 
     } else if (stopbits == 1.5) { 
      stop = SerialPort.STOPBITS_1_5; 
     } else if (stopbits == 2.0) { 
      stop = SerialPort.STOPBITS_2; 
     } else { 
      System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits); 
      throw new Exception("Invalid stop bits, switched " + stopbits); 
     } 
    } else { 
     System.err.println(name+": constructor(): Invalid stop bits, switched " + stopbits); 
     throw new Exception("Invalid stop bits " + stopbits); 
    } 

    switch (parity) { 
     case "S": 
      par = SerialPort.PARITY_SPACE; 
      break; 
     case "E": 
      par = SerialPort.PARITY_EVEN; 
      break; 
     case "M": 
      par = SerialPort.PARITY_MARK; 
      break; 
     case "O": 
      par = SerialPort.PARITY_ODD; 
      break; 
     case "N": 
      par = SerialPort.PARITY_NONE; 
      break; 
     default: 
      System.err.println(name+": constructor(): Invalid parity, switched " + parity); 
      throw new Exception("Invalid parity, switched " + parity); 
    } 

    // Inits 
    // Try to find the port specified 
    try { 
     portId = CommPortIdentifier.getPortIdentifier(comPort); 
    } catch (Exception e) { 
     System.err.println(name+": constructor(): No such port \"" + comPort+"\""); 
     e.printStackTrace(); 
     throw e; 
    } 

    // Open the port 
    try { 
     serialPort = (SerialPort) portId.open("User Port", 2000); 
    } catch (PortInUseException e) { 
     System.err.println(name+": constructor(): Could not open port " + comPort); 
     throw e; 
    } 

    // Grab the input stream 
    try { 
     inputStream = serialPort.getInputStream(); 
    } catch (IOException e) { 
     System.err.println(name+": constructor(): Could not get input stream for " + comPort); 
     throw e; 
    } 

    // Set the serial port parameters, no flow control 
    try { 
     serialPort.setSerialPortParams(baudrate, data, stop, par); 
     serialPort.setDTR(false); 
     serialPort.setRTS(false); 
    } catch (UnsupportedCommOperationException e) { 
     System.err.println(name+": constructor(): Error initializing " + comPort); 
     throw e; 
    } 
} 
+0

sia 'SerialControl' e CommPortIdentifier # getPortIdentifiers()' lavoro da Eclipse e la riga di comando – GrahamA

+0

Un po follow per le persone che possono incontrare questo, i miei progetti sono stati importati da un ambiente Windows XP, li ricostruzione in Windows 7 sembrano avere corretto qualunque fosse il problema – darkhelmet

risposta

2

E appers a lavorare per me utilizzando Windows 7 e le versioni a 64 bit di Java e RXTX (cloudhopper versione)

enter image description here

Sei sicuro di avere un COM1?

+0

Sì, lo uso sempre con Putty.Il tuo codice elenca correttamente le mie porte quando lo eseguo in un'applicazione separata, ma quando viene eseguito dalla mia classe seriale le porte non vengono trovate ... il mistero si addensa ma sembra un problema di libreria. – darkhelmet

+0

@darkhelmet se vuoi pubblicare la tua classe seriale proverò a eseguirlo – GrahamA

+0

la classe ha un paio di dipendenze per altre classi, non posso postare tutto ma qui è la parte rilevante nel costruttore dove accade; è la prima cosa in cui sto inizializzando la porta seriale – darkhelmet

9

Ho avuto lo stesso problema. Io uso Eclipse come IDE per la programmazione e ho trovato questa configurazione alternativa nel wiki ufficiale:

  1. Copia RXTXcomm.jar nella directory lib del progetto
  2. navigare il vostro pacchetto Explorer nella cartella lib, fate clic destro su RXTXcomm.jar | Percorso di costruzione | Aggiungi al percorso costruito
  3. Copia i file rxtxSerial.dll e rxtxParallel.dll nella directory principale del tuo progetto
  4. Sotto Esegui | Esegui configurazioni | Scheda Percorso classe | Voci utente | Avanzato | Aggiungi cartella, scegli la cartella radice del tuo progetto
  5. Questo dovrebbe essere sufficiente solo per eseguirlo in Eclipse, quando si distribuisce un jar eseguibile, basta assicurarsi che le DLL si trovino nella stessa cartella del jar (JVM lo assume per classpath)

(E 'la mia prima risposta, non so se mi sono permesso di inviare un link esterno, ma il passo cinque vengo di da http://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_Eclipse)

speranza è aiutare!

+0

I collegamenti esterni ai riferimenti sono incoraggiati! Basta fare attenzione all'autopromozione (si veda [FAQ] (http://stackoverflow.com/faq#promotion)) ... ma in questo caso non sembra essere un problema. :) – hopper

+0

Grazie! Sono un po 'in ritardo nel rispondere, ma sono stato in grado di usarlo mentre ho ricostruito i miei progetti NetBeans. – darkhelmet