Serial port abfragen

Bitte aktiviere JavaScript!
Hallo,

ich bin ziehmlicher Java Neuling und versuche mittels IntelliJ IDEA unter Windows 10 und JDK10 (Oracle Java SE) ein kleines Projekt zu realisieren. Ich möchte die verfügbaren COM-Ports abprüfen und auflisten. Erstmal einfach in der CMD shell. Dazu habe ich massig Beispiele im Internet gefunden, fast schon wieder zuviele... ich wollte dann einfach mal dieses hier testen: http://www.java2s.com/Code/Java/Development-Class/QueryingAvailableCOMPorts.htm

Es verwendet javax.comm als Library. Nun wollte ich die über Maven importieren. Dazu gehe ich auf File->Project Structure->Project Settings->Libraries und drücke "+", wähle "From Maven", gebe ins Suchfeld "javax.comm" ein und sehe auch drei Versionen, 1.0, 2.0 und 3.0. Aber egal welche ich wähle und auf OK zum Download drücke, bekomme ich beim jar download eine Fehlermeldung: "No files were downloaded for javax.comm:comm:..." :-(

Was mache ich nur falsch?
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Ihr habt mein aktuelles Problem leider falsch verstanden, es geht nicht speziell um die Lib, sondern um jegliche. Ich erhalte immer die o.g. Fehlermeldung, egal welche Lib ich versuche über Maven zu importieren.
 
OK! Mit RXTX klappte das nun schonmal, Danke! :)
Nun gehe ich dran eine Methode zu schreiben die mir eine Liste aller verfügbaren COM-Ports zurückliefert.
 
Grr, ich habe den Umgang mit IDEA noch nicht drauf. Scheinbar findet er die importierte Lib nicht beim compilieren und/oder ausführen:
Code:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path: [Z:\Program Files\jdk-10.0.2\bin, C:\WINDOWS\Sun\Java\bin, C:\WINDOWS\system32, C:\WINDOWS, C:\ProgramData\Oracle\Java\javapath, C:\WINDOWS\system32, C:\WINDOWS, C:\WINDOWS\System32\Wbem, C:\WINDOWS\System32\WindowsPowerShell\v1.0\, C:\Users\boneym\AppData\Local\Microsoft\WindowsApps, .]
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2654)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:876)
    at java.base/java.lang.System.loadLibrary(System.java:1875)
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
    at CAN.can.CAN.listPorts(CAN.java:9)
    at CAN.can.CAN.main(CAN.java:37)

Process finished with exit code 1
 
Scheinbar findet er die importierte Lib nicht beim compilieren und/oder ausführen:
Doch, aber Du musst auch die DLL verwenden (s. Kommentar #3, das wäre die libSerial.dll). Dem von IDEA angegebenen Path nach dürftest Du die DLL einfach in den Projektordner schmeißen können (ich gehe mal davon aus, dass "." der Projektordner ist).
 
Laut Install.txt von dieser Lib (wohl eine Abwandlung der originalen RXTX?) müssen die Dateien in die Java-VM welche das ganze ausführt. Ich bin etwas verwirrt, aber ich habe neben IntelliJ, welches wohl eine eigene JRE Umgebung gleich mitbringt, nur das SDK "Java SE 10" installiert. Und muss ich dann die von Maven importierte JAR wieder aus dem Lib-Ordner des Projektes rausnehmen und durch die andere, nicht namensgleiche, JAR ersetzen?
Oder sollte ich noch eine JRE 10 zusätzlich installieren?
Und ist das der übliche Weg soetwas zu tun? Oder gilt das nur für Bibliotheken mit DLLs?
 
Zuletzt bearbeitet:
aut Install.txt von dieser Lib (wohl eine Abwandlung der originalen RXTX?) müssen die Dateien in die Java-VM welche das ganze ausführt.
Muss sie nicht. Es reicht, wenn die DLL im Library-Path liegt.

Siehe dazu die Fehlermeldung von vorhin:
Code:
no rxtxSerial in java.library.path: [Z:\Program Files\jdk-10.0.2\bin, C:\WINDOWS\Sun\Java\bin, C:\WINDOWS\system32, C:\WINDOWS, C:\ProgramData\Oracle\Java\javapath, C:\WINDOWS\system32, C:\WINDOWS, C:\WINDOWS\System32\Wbem, C:\WINDOWS\System32\WindowsPowerShell\v1.0\, C:\Users\boneym\AppData\Local\Microsoft\WindowsApps, .]
In jedem dieser Verzeichnisse wird nach der DLL gesucht.


Und muss ich dann die von Maven importierte JAR wieder aus dem Lib-Ordner des Projektes rausnehmen und durch die andere, nicht namensgleiche, JAR ersetzen?
Das musst Du ausprobieren, weil die Versionen nicht zusammenstimmen. Wenn ich mich recht entsinne, funktioniert es, Du bekommst aber eine Warnung von der Lib.

Oder gilt das nur für Bibliotheken mit DLLs?
Ja. Für die Kommunikation über den seriellen Port ist im Standard keine API vorgesehen. Da hierfür Systemaufrufe benötigt werden, reicht eine einfache Jar nicht aus sondern Du brauchst noch eine für das jeweilige System geschriebene Bibliothek als Schnittstelle zwischen Java und dem System. Unter Windows ist das halt eine DLL.
 
Danke mihe7, das leuchtet mir nun ein! Sorry, bin halt blutiger Anfänger und gerade die Infos im Netz zu Java erschlagen einen bei der Suche nach einer Lösung und da ist es von unschätzbarem Wert Leute wie Dich zu finden die einem das vernünftig und geduldig erklären! :)

Werde mir das nun mal durchlesen und hoffe schlauer zu werden: https://www.jetbrains.com/help/idea/library.html
 
So, uff, erstmal "Es klappt", ich erhalte einen COM8 als Ausgabe :) Da bin ich schonmal ziehmlich happy :)
Ich habe das jetzt so gemacht:
  1. Das "http://mfizz.com/oss/rxtx-for-java" runtergeladen und entpackt.
  2. Daraus die Dateien "RXTXcomm.jar", "rxtxParallel.dll" und "rxtxSerial.dll" in den Unterordner "lib" meines Projektes kopiert.
  3. Im IDEA den "lib"-Ordner meines Projektes aufgeklappt und da sehe ich dann die drei Dateien. Die *.dll's tragen ein "?" vorn weg, scheinbar weis IDEA damit so nix anzufangen, egal...
  4. Über Rechtsklick auf den "lib"-Ordner im IDEA dann die Funktion "Add as library..." aufgerufen und den nachfolgenden Dialog einfach mit "OK" bestätigt. Nun konnte ich bereits die RXTX Elemente verwenden ohne das die IDE alles rot unterkringelt. Jedoch gab es beim kompilieren noch den Fehler.
  5. Dann über das File-Menü "Project Structure..."geöffnet und dort auf "Modules" und darin auf den Tab "Dependencies" gewechselt. Dort rechts auf das "+"-Symbol geklickt und "1 JARs or directories..." ausgewählt.
  6. Im File-Dialog der darauf folgt die beiden *.dll Dateien markiert und "OK".
  7. Nun gibt es einen zusätzlichen Eintrag namens "Empty Library" der rot geschrieben ist.
Dann konnte ich einwandfrei compilieren und ausführen, ohne jegliche Fehlermeldungen oder Warnungen!

Keine Ahnung ob das so alles "gut" ist, sprich der richtige Weg. Mir erschien es aber besser als die DLLs in irgendwelche Verzeichnisse des IDEA oder der Java VM Envs zu kopieren.
 
DAS wiederrum ist für MICH selbstverständlich :)
Bitte korrigiert es, falls ich mit meiner Lösung vollkommen falsch lag... ja?!

So, nun würde ich mich an einer einfachen Swing-GUI versuchen, die damit ein Dropdown füllt.

Frage: Bekommt die Lib einen Event wenn von Windows aus neue Ports per Plug n play ginzugefügt oder entfernt werden? Kann ich ein solches Event abfragen?
 
Zuletzt bearbeitet:
Ja, das tut es. Bei der GUI könnte ich die Abfrage aller Ports in den Eventhandler einbauen der den Inhalt beim OnOpen erstellt.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben