Kommunikation mit Seriellen Schnittstellen + Integration einer lib

BenBu

Mitglied
Hallo liebe Gemeinschaft,
Nachdem ich mein erstes Java Programm geschrieben habe, möchte ich versuchen in einem zweiten mit den COM Ports Signale an andere Geräte zu senden und auch welche zu empfangen.
Dazu habe ich bereits einige Stunden im Netz gesucht und habe sehr viele Artikel zu comm und rxtx gefunden. Ich habe alles mögliche Ausprobiert aber nichts hat wirklich fuktioniert.
Ich glaue es liegt daran, dass ich auch nicht ganz verstanden habe wie die libs importiert werden. Ich habe das Gefühl jeder macht es anders. Was ist dieses Maven ? und wie kann man das nutzen ? Scheinbar soll das ja damit irgendwie gehen. An diesem Punkt scheitere ich schon.
Ich habe allerdings (so denke ich) einen manuellen Import hin bekommen (comm). Doch leider schmeißt das Programm nur fehler wenn es laufen soll. Daher gehe ich davon aus, dass der import auch nicht korrekt war oder eine Einstellung falsch ist. Ich füge das Programm unten an. Heute habe ich noch gefunden, dass comm nicht für Windows funktioniert? Stimmt das?
Java:
package MainPackage;

import java.util.Enumeration;

import javax.comm.*;
import java.util.Enumeration;

public class Main {
  public static void main(String args[]) {
    Enumeration ports = CommPortIdentifier.getPortIdentifiers();
    while (ports.hasMoreElements()) {
      CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
      String type;
      switch (port.getPortType()) {
      case CommPortIdentifier.PORT_PARALLEL:
        type = "Parallel";
        break;
      case CommPortIdentifier.PORT_SERIAL:
        type = "Serial";
        break;
      default: /// Shouldn't happen
        type = "Unknown";
        break;
      }
      System.out.println(port.getName() + ": " + type);
    }
  }
}

----------
Meine Fehlermeldung:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/comm/CommPortIdentifier
at MainPackage.Main.main(Main.java:24)
Caused by: java.lang.ClassNotFoundException: javax.comm.CommPortIdentifier
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 1 more

------
Mein Workspace:
2023-03-27_09h42_21.png

-------
Vielleicht kann mir einer von euch erklären wie ich so eine lib richtig einfüge und mir meine Fehler aufzeigen.
Danke Leute.
 
Also generell ist der Ansatz schon richtig: Du packst die jar einfach in einen Ordner deines Projektes und fügst es dann zum Classpath hinzu.
Dabei ist aber wirchtig, dass Du auch notwendige weitere Abhängigkeiten hinzu fügst - aber bei comm sollte es keine geben so ich https://mvnrepository.com/artifact/javax.comm/comm/2.0.3 richtig verstehe. - da lässt sich das jar File aber nicht herunter laden - etwas dubios.
Die Library ist aber auch deprecated.

Hinzufügen zum Classpath kannst Du per Rechtsklick auf die jar um es dann hinzu zu fügen oder Du gehst über die Einstellungen:
Im Java Build Path kannst Du im Reiter Libraries über Add Jar die Library hinzu fügen. Ab Java 9 ist da noch zu beachten: Modulepath != Classpath. Hier willst Du die jar vermutlich einfach nur im Classpath haben, daher sollte es da eingefügt werden.

Daher wäre dann die andere Library eher zielführend oder ggf. setzt Du auch auf eine andere Library, denn die JSerialComm gilt wohl derzeit mit als ide beste Library. Eine Übersicht findet sich z.B. hier:

Maven wäre prinzipiell immer anzuraten, alleine schon damit Du unabhängig von einer Entwicklungsumgebung bist. Aber gerade für Anfänger ist es super, dass ein Projekt einfach geteilt werden kann und Verbesserungen können einfach vorgeschlagen werden. Kein "Dann geh mal in die Einstellungen unter Java Build Path und da in den Tab ... Was ist da wie eingetragen?" und so.
Und ein Maven Projekt ist einfach direkt erstellbar. Das bietet auch Eclipse:
New Project: Maven > Maven Project.
Wichtig: Mach einen Haken bei "Create simple project" - die Auswahl eines Archetyps ist Schrott 🙂 )
Groupid / Artefactid kennzeichnen ein projekt. So lange Du es nicht zu Maven hoch lädst, kannst Du da aber irgendwas nehmen. groupid ist dann dein Name oder Firmenname und artefactid der Name des Projekts. (Beides kleingeschrieben ohne Leerzeichen und Sonderzeichen).
 

Zurück
Oben