Identifizierung des seriellen Ports mit Java auf Ubuntu

Ich versuche eine serielle Anwendung auf Ubuntu mit Java zu verbinden
Nach dem Suchen und Lesen von Ressourcen füge ich comm.jar und RXTxcomm.jar in die Bibliothek ein.
Ich verwende den folgenden Code, um die Comports zu identifizieren. In meinem System gibt es drei Ports, aber es zeigt falsch in ports.hasMoreElements() -Methode.
Bitte schauen Sie in den Code und helfen Sie mir.

 String wantedPortName = "/dev/ttya"; ///dev/ttyS0 و /dev/ttyS1 نیز تست شد Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers(); CommPortIdentifier portId = null; // will be set if port found while (portIdentifiers.hasMoreElements()) { CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement(); if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL && pid.getName().equals(wantedPortName)) { portId = pid; break; } } if(portId == null) { System.err.println("Could not find serial port " + wantedPortName); System.exit(1); } 

    In meinem Fall benutze ich Ubuntu, und mein Notebook hat keine seriellen oder parallelen Ports.

    Also, Sie müssen diese Art von Port simulieren:

     apt-get install socat 

    Starte es:

     socat -d -d pty,raw,echo=0, pty,raw,echo=0 

    Je nach Ausgabe achten Sie auf “Geräte” erstellt:

     2014/02/05 01:04:32 socat[7411] N PTY is /dev/pts/2 2014/02/05 01:04:32 socat[7411] N PTY is /dev/pts/3 2014/02/05 01:04:32 socat[7411] N starting data transfer loop with FDs [3,3] and [5,5] 

    Stoppen Sie socat [CTRL] + [C] und symbolisieren Sie es an einem Ort, den RXTX aufgrund des Präfix “tty” als Gerät erkennt:

     sudo ln -s /dev/pts/2 /dev/ttyUSB02 sudo ln -s /dev/pts/3 /dev/ttyUSB03 

    Führen Sie Socat jetzt erneut aus

     socat -d -d pty,raw,echo=0 pty,raw,echo=0 

    Mit dem folgenden Code werden nun zwei virtuelle Ports angezeigt:

      Enumeration portList = CommPortIdentifier.getPortIdentifiers();//this line was false System.out.println(portList.hasMoreElements()); while(portList.hasMoreElements()){ System.out.println("Has more elements"); CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println(portId.getName()); } else{ System.out.println(portId.getName()); } } 

    system.out:

     true Has more elements /dev/ttyUSB03 Has more elements /dev/ttyUSB02 

    Offenbar filtern Sie den gewünschten Port aus. A / dev / tty ist ein spezielles Zeichengerät … also keine serielle Schnittstelle

     if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL && pid.getName().equals(wantedPortName)) 

    sollte niemals mit Ihrer Zeichenfolge übereinstimmen.

    Versuchen Sie, dies zu überprüfen, indem Sie über Ihre verfügbaren Ports iterieren. Ich weiß nicht, ob eine Dose von RXTX erkannt werden kann, aber spielen Sie damit und lassen Sie es uns wissen.

    Ref: http://rxtx.qbang.org/wiki/index.php/Discovering_available_comm_ports

    EDIT: Sie haben also keine seriellen Geräte zum Testen? Alles, was ich getan habe, ist sicherzustellen, dass alles korrekt installiert ist, einschließlich der Eigenschaftendatei wie in dieser Datei beschrieben.

    http://rxtx.qbang.org/pub/rxtx/rxtx-2.0-7pre2/INSTALL

    Sobald Sie fertig sind, installieren Sie einen Nullmodem-Emulator oder suchen Sie ein serielles Gerät zum Testen.