2012-08-29 7 views
7

Guten Morgen Liste oder finden,RXTX nicht-Ports unter Windows 7 64 Bit

Ich habe Probleme mit/oder Installation rxtx auf Windows 7 64 Bit. Ich habe vorher mit einem x86 Win XP System gearbeitet und hatte keine Probleme. Seit der Neuinstallation auf diesem neuen System kann rxtx aus irgendeinem Grund keine Ports mehr finden. Ich habe versucht, die rxtx-Installation, Cloud Hopper native 64-Bit-Bibliothek und Löschen aller RXTX-Dateien und von Grund auf neu zu starten. RXTxcomm.jar wird gefunden und ich kann die Pakete in NetBeans durchsuchen, aber die Implementierung scheint kaputt zu sein oder nicht gefunden zu werden.

Diese Linie versagt bei der Ausführung, jedes Mal: ​​

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

und wirft einen NoSuchPortException.

Wenn Sie die seriellen Schnittstellen auflisten, wird nichts erzeugt.

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

Ich habe die seriellen Schnittstellen so an dieser Stelle zur Verfügung stehen checke ich frage mich, wenn die nativen Bibliotheken einfach für Fenster gebrochen werden 7 64 Bit.

Hat jemand erfolgreich RXTX 2.2pre2 unter Windows 7 64 Bits verwendet?

Beleidigendes Codeabschnitt in Konstruktor:

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

beide 'SerialControl' und CommPortIdentifier # getPortIdentifiers()' Arbeit von Eclipse und der Befehlszeile – GrahamA

+0

Ein wenig Follow-up für Leute, die dies auftreten können, wurden meine Projekte aus einer Windows XP-Umgebung importiert, Wiederaufbau in Windows 7 scheint zu haben korrigiert, was auch immer das Problem war. – darkhelmet

Antwort

2

Es Appers für mich

enter image description here

mit Windows 7 und 64-Bit-Versionen von Java und RXTX (cloudhopper Version) arbeiten Sie sicher, dass Sie eine COM1 haben?

+0

Ja, ich benutze es die ganze Zeit mit Putty.Dein Code listet meine Ports korrekt auf, wenn ich ihn in einer separaten Anwendung ausführe, aber wenn er von meiner seriellen Klasse ausgeführt wird, werden die Ports nicht gefunden ... das Geheimnis verdichtet sich, aber es scheint ein Bibliotheksproblem zu sein. – darkhelmet

+0

@darkhelmet Wenn Sie Ihre serielle Klasse veröffentlichen möchten, werde ich versuchen, es auszuführen – GrahamA

+0

die Klasse hat ein paar Abhängigkeiten zu anderen Klassen, ich kann es nicht alles aber hier ist der relevante Teil im Konstruktor, wo es passiert; es ist die erste Sache, wo ich die serielle Schnittstelle initialisiere – darkhelmet

9

Ich habe das gleiche Problem. Ich benutze Eclipse als IDE für die Programmierung und ich fand diese alternative Konfiguration im offiziellen Wiki:

  1. Kopieren RXTXcomm.jar in das lib-Verzeichnis Ihres Projekts
  2. Ihr Paket-Explorer zum Ordner lib Navigieren der rechten Maustaste auf RXTXcomm.jar | Pfad erstellen | Zum integrierten Pfad hinzufügen
  3. Kopieren Sie die Dateien rxtxSerial.dll und rxtxParallel.dll in das Stammverzeichnis Ihres Projekts
  4. Unter Run | Konfigurationen ausführen | Registerkarte Klassenpfad | Benutzereinträge | Fortgeschritten | Ordner hinzufügen, wählen Sie den Stammordner Ihres Projekts
  5. Dies sollte ausreichen, um es unter Eclipse auszuführen, wenn Sie ein lauffähiges jar bereitstellen, stellen Sie einfach sicher, dass die DLLs im selben Ordner wie das jar sind (JVM geht davon aus für Klassenpfad)

(es ist meine erste Antwort, ich weiß nicht, ob ich einen externen Link zu posten erlaubt bin, aber die fünf Schritt kommen die von http://rxtx.qbang.org/wiki/index.php/Using_RXTX_In_Eclipse)

Hoffe, es hilft!

+0

Externe Links zu Referenzen sind erwünscht! Seien Sie vorsichtig bei der Eigenwerbung (siehe [FAQ] (http://stackoverflow.com/faq#promotion)) ... aber das scheint in diesem Fall kein Problem zu sein. :) – hopper

+0

Danke! Ich bin ein bisschen spät dran, aber ich konnte dies nutzen, während ich meine NetBeans-Projekte neu aufbaute. – darkhelmet

Verwandte Themen