# RXTXcomm : Install - Probleme



## Kaladial (3. Apr 2008)

moin

ich benutze die Bibliothek RXTXcomm um mit meiner Com-Schnittstelle zu komunizieren...
Nun bei mir funktioniert das auch ganz gut, aber das problem ist ich will mein programm nun auf einem anderen rechner zum laufen bekommen ... 

also hab ich mir nen jar file erstellt und auf dem anderen rechner jre1.6.0_05 installiert 
danach hab ich unter:

c:\Programme\java\jre1.6.0_05\bin:
die beiden dlls:
rxtxParallel.dll
rxtxSerial.dll

rein kopiert und unter: 
c:\Programme\java\jre1.6.0_05\lib\ext:
RXTXcomm.jar 

reinkopiert... 

aber ich bekomme immer noch eine fehlermeldung:


```
C:\test\avs3>echo off
java.lang.UnsatisfiedLinkError: C:\Programme\Java\jre1.6.0_05\bin\rxtxSerial.dll
: Can't find dependent libraries thrown while loading gnu.io.RXTXCommDriver
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: C:\Progra
mme\Java\jre1.6.0_05\bin\rxtxSerial.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
        at AVS3.DlgComVerbinden.setzeStart(DlgComVerbinden.java:160)
        at AVS3.DlgComVerbinden.<init>(DlgComVerbinden.java:155)
        at AVS3.AVS3.comVerbinden(AVS3.java:3178)
        at AVS3.AVS3.access$65(AVS3.java:3177)
        at AVS3.AVS3$33.actionPerformed(AVS3.java:3117)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.AbstractButton.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown
Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
```

was hab ich falsch gemacht?
mir gehn langsam die ideen aus... 

thx für hilfe
Kala


----------



## tuxedo (3. Apr 2008)

Wirf doch mal die Forum-Suche an und schau wie man die DLLs richtig ablegt und im Java Library Path bekannt gibt. Wenn ich mich richtig erinnere steht das sogar im Wiki von rxtx.org ...

Das was du da "versucht" hast ist die Holzhammer-Methode die man besser sein lassen sollte.


----------



## Kaladial (3. Apr 2008)

? versteh ich net... 
laut rxtx anleitung sollte man genau das machen was ich gemacht hab ... 



> Installation for Windows
> From Rxtx
> Jump to: navigation, search
> RXTX installation procedure if you want to run RXTX enabled programs ==
> ...



http://rxtx.qbang.org/wiki/index.php/Installation_for_Windows

wie macht man das denn anders? 
wäre nett wenn du mir das beschreiben würdest


----------



## tuxedo (4. Apr 2008)

Ich hab in meinen Java-Programmen immer folgende Projektstruktur:


```
/MyProgram
|
+-- src
|
+-- bin
|
+-- lib
|
+-- doc
```

In BIN liegen die Class-Files in ihren Packages, in SRC die entsprechenden Source-Files und in LIB leg ich alles ab was ich sonst noch verwende und eine Dateiendung wie .JAR, .DLL (oder .SO im Fall von Linux) aufweist.

D.h. mein Classpath besteht nicht nur aus BIN, sondern auch aus LIB. Und wenn in LIB native Bibliotheken drin liegen (wie im Falle von RXTX), dann wird LIB noch in den Java Library Path aufgenommen...

Alles in allem sieht dann der Aufruf eines Programms, ausgehend vom Projektpfad "MyProgram" so aus:


```
java -cp ./lib/AnyOtherLibrary.jar -Djava.library.path=./lib my.packagge.structure.MyProgram
```

Damit findet er nicht nur Java-Bibliotheken, sondern weiß auch wo er DLLs und SOs zu suchen hat.

Das macht man deshalb so, weil wenn du das Zeugs in deine JRE kopierst, kann es sein, dass du vllt. eine bestehende RXTX-Installation eines anderen Programms überschreibst und das mit der neuen Version, die du da reinkopierst vielleicht gar nicht mehr funktioniert. Also ist es sicherer und transparenter für den Anwender, wenn jedes Programm seinen Kram in SEINEM Verzeichnis ablegt und nicht "irgendwohin" verstreut und ggf. andere Programme damit beeinflusst.

Bei RXTX mag das vielleicht nicht unbedingt passieren. Aber nehmen wir mal LOG4J oder SWT oder sowas... Man kann da nicht immer sicher sein dass alle Programme die solche Bibliotheken benutzen sich mit einer einheitlichen Version abfinden können. 

Im übrigen hab ich kein Plan warum die von RXTX sowas in ihrem Wiki verzapfen. Hab das auf jeden Fall schon anders gelesen.

- Alex


----------



## Kaladial (4. Apr 2008)

also meine bat sieht derzeit so aus:


```
java -cp avs3.jar;lib/mysql-connector-java-5.0.7-bin.jar;lib/RXTXcomm.jar;lib/commons-net-1.4.1.jar AVS3.AVS3
```

und wenn ich das richtig verstanden hab müsste ich die datei dann wie folgt verändern damit er die dll auch findet:


```
java -cp avs3.jar;lib/mysql-connector-java-5.0.7-bin.jar;lib/RXTXcomm.jar;lib/commons-net-1.4.1.jar -Djava.library.path=lib  AVS3.AVS3
```

rxtxSerial.dll liegt in ./lib

bin ich da richtig oder wie?


----------



## Kaladial (4. Apr 2008)

habs grad getestet (also meine 2. version) die geht imemr noch net der bringt immer noch den fehler 

die zeile die er anmeckert ist (auf meinem hauptrechner geht das aber alles):

```
Enumeration en = CommPortIdentifier.getPortIdentifiers();
```

ich bin schon am überlegen ob es am betriebssystem liegt... 
hab auf meinem hauptrechner normales xp prof
auf dem zielsystem xp embedded (ka ob das damit zusammen hängt)


----------



## Kaladial (4. Apr 2008)

ok wie ich angenommen habe lags am betriebssystem ... 

dieses seltsam abgespeckte XP hatte eine dll (crtdll.dll) nicht mit installiert und die rxtxcomm.dll braucht diese datei ... 

also jetzt gehts  aber thx für die variante wie man die libs direkt einbinden kann das ist trotzdem sehr hilfreich 

mfg Kala


----------



## tuxedo (4. Apr 2008)

Du solltest auf keinen Fall solche Libs anders einbinden. Warum hab ich ja schon geschrieben ...


----------

