# Serielle Schnittstelle ansteuern - mit Processing Bibliothek



## mynamenixname (5. Mai 2012)

Hallo,
seit einiger Zeit beschäftige ich mich nun schon mit Java, aber immer wieder gerate ich an den Punkt, an dem ich mich frage, ob ich irgendetwas grundlegendes übersehen habe, ...

Mein aktuelles Ziel ist es mit Java auf einen COM-Port zuzugreifen (von einem Mac, wenn das wichtig sein sollte) und die Daten von meinem GPS-Modul zu analysieren.

Nachdem ich mich etwas umgesehen habe musste ich feststellen, dass diese ganzen rxtx-Ansätze sehr kompliziert wirken und erinnerte mich an Processing.org, welches eine Bibliothek für RS232 zur Verfügung stellt. Diese nutzt soweit ich sehen konnte auch rxtx, ist aber viel einfacher zu verwenden: Serial \ Libraries \ Processing.org

Nun habe ich versucht die entsprechenden Bibliotheken (core.jar, RXTXcomm.jar, serial.jar und einen Ordner macosx mit der Datei librxtxSerial.jnilib, derren Sinn sich mir nicht ganz erschließt) zu meinem Netbeans-Projekt hinzugefügt und rufe nun über einen Button folgende Zeilen aus einem Processing-Beispiel auf (die natürlich noch nicht sehr viel bringen):

```
Serial myPort;  // Create object from Serial class                    kein Problem
        String val;      // Data received from the serial port                 natürlich auch noch keins
        String portName = Serial.list()[0];                   // hier bekomme ich eine Fehlermeldung
```
und die Fehlermeldung lautet:

```
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
	at java.lang.Runtime.loadLibrary0(Runtime.java:823)
	at java.lang.System.loadLibrary(System.java:1045)
	at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)
	at processing.serial.Serial.list(Serial.java:557)
	at jgps.JGPSView.test(JGPSView.java:208)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.jdesktop.application.ApplicationAction.noProxyActionPerformed(ApplicationAction.java:662)
	at org.jdesktop.application.ApplicationAction.actionPerformed(ApplicationAction.java:698)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
	at java.awt.Component.processMouseEvent(Component.java:6375)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6140)
	at java.awt.Container.processEvent(Container.java:2083)
	at java.awt.Component.dispatchEventImpl(Component.java:4737)
	at java.awt.Container.dispatchEventImpl(Container.java:2141)
	at java.awt.Component.dispatchEvent(Component.java:4565)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210)
	at java.awt.Container.dispatchEventImpl(Container.java:2127)
	at java.awt.Window.dispatchEventImpl(Window.java:2482)
	at java.awt.Component.dispatchEvent(Component.java:4565)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:684)
	at java.awt.EventQueue.access$000(EventQueue.java:85)
	at java.awt.EventQueue$1.run(EventQueue.java:643)
	at java.awt.EventQueue$1.run(EventQueue.java:641)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:657)
	at java.awt.EventQueue$2.run(EventQueue.java:655)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:654)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
```

Für mich sieht das aus, als würde rxtxSerial fehlen, RXTXcomm.jar ist aber importiert, ...

Was sollte ich tun?


----------



## SlaterB (7. Mai 2012)

phänomenaler Anwärter auf 'in Java-Basisc falsches Thema', verschoben


----------



## Suinos (7. Mai 2012)

Dir fehlt die 
	
	
	
	





```
rxtxSerial[B].dll[/B]
```
, nicht die jar!
Da ich RXTX immer nur direkt verwendet habe, kann ich dir aber leider nicht sagen, was der nächste Schritt ist.
Ich nehme mal nicht an, dass die dll im jar liegen darf, da sie sonst nicht gelesen werden kann. Hast du die dll irgendwo im Projekt?


----------



## Gast2 (7. Mai 2012)

Es gibt da mehrere Möglichkeiten: 

1) Unter Windows die dll registrieren (unschön) 
2) Unter Windows die dll einfach neben die exe (jar, whatever) legen 
3) Unter Windows und Linux mittels der Commandline den java.library.path setzen:


```
java -Djava.library.path='DEIN_PATH' -jar DEINE_JAR.jar
```

Den library path kann man leider nicht per manifest setzen!


----------



## mynamenixname (7. Mai 2012)

Vielen Dank für eure Antworten.

Das Problem habe ich letzte Nacht dann lösen können.
Die native Schnittstelle von RXTX heißt auf dem Mac (ich hätte meine Platform erwähnen sollen, ...) _librxtxSerial.jnilib_, was eigentlich ja kein Problem sein sollte. Nur ist die Standart-Version davon in 32Bit geschrieben. Mein Mac hat nun die Java-Anwendung in 64Bit gestartet um dann die 32Bit Bibliothek aufzurufen - & das konnte ja nichts werden, ...


----------

