# problem mit rxtx



## maximilian1 (8. Aug 2011)

Hallo, ich möchte mit meinem Arduino Uno Board kommunizieren und habe nach einiger Recherche auf rxtx gestoßen. Rxtx.
da gibt es auch eine Anleitung wie man die beiden Datein einbinden muss. Using RXTX In Eclipse - Rxtx. Das habe ich auch soweit gemacht nur kommt bei folgenem Code, ebenfalls von dieser webseite:


```
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TwoWaySerialComm
{
    public TwoWaySerialComm()
    {
        super();
    }
    
    void connect ( String portName ) throws Exception
    {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
        if ( portIdentifier.isCurrentlyOwned() )
        {
            System.out.println("Error: Port is currently in use");
        }
        else
        {
            CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
            
            if ( commPort instanceof SerialPort )
            {
                SerialPort serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams(57600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
                
                InputStream in = serialPort.getInputStream();
                OutputStream out = serialPort.getOutputStream();
                
                (new Thread(new SerialReader(in))).start();
                (new Thread(new SerialWriter(out))).start();

            }
            else
            {
                System.out.println("Error: Only serial ports are handled by this example.");
            }
        }     
    }
    
    /** */
    public static class SerialReader implements Runnable 
    {
        InputStream in;
        
        public SerialReader ( InputStream in )
        {
            this.in = in;
        }
        
        public void run ()
        {
            byte[] buffer = new byte[1024];
            int len = -1;
            try
            {
                while ( ( len = this.in.read(buffer)) > -1 )
                {
                    System.out.print(new String(buffer,0,len));
                }
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }            
        }
    }

    /** */
    public static class SerialWriter implements Runnable 
    {
        OutputStream out;
        
        public SerialWriter ( OutputStream out )
        {
            this.out = out;
        }
        
        public void run ()
        {
            try
            {                
                int c = 0;
                while ( ( c = System.in.read()) > -1 )
                {
                    this.out.write(c);
                }                
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }            
        }
    }
    
    public static void main ( String[] args )
    {
        try
        {
            (new TwoWaySerialComm()).connect("COM3");
        }
        catch ( Exception e )
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
```

dieser Fehler:

java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jre6\bin\rxtxSerial.dll: Can't find dependent libraries thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jre6\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 TwoWaySerialComm.connect(TwoWaySerialComm.java:19)
	at TwoWaySerialComm.main(TwoWaySerialComm.java:106)


was läuft da schief? danke für eure Hilfe


----------



## SlaterB (8. Aug 2011)

da du es nicht extra gleich erwähnst sehe ich mich genötigt ohne Wissen einen einfachen Hinweis zu geben:
> da gibt es auch eine Anleitung wie man die beiden Datein einbinden muss
vs.
> Copy RXTXcomm.jar, rxtxSerial.dll and rxtxParallel.dll files to the lib directory of your project

2 vs. 3, hast du zufällig die zweite dll vergessen?, 
das könnte ich mir ziemlich gut zu einem Fehler 'dependent libraries' in der ersten dll vorstellen,
obwohl hier Serial vs Parallel auch unbedingt voneinander abhängig sein muss


----------



## turtle (8. Aug 2011)

Der Fehler sagt, dass die rxtxSerial.dll nicht geladen werden konnte.

Versuch mal mit 

java -Djava.library.path=<Pfad zur rxtxSerial.dll>


----------



## maximilian1 (8. Aug 2011)

@SlaterB
also ich habe die 3 Datein einmal in das Java Installationsverzeichniss:
RXTXcomm.jar in \jre\lib\ext (under java)
rxtxSerial.dll in \jre\bin

und dann habe ich manuell in meinem Java Projektverzeichniss einen Ordner lib erstellt und da alles reinkopiert.

funktioniert aber leider nicht.

@turtle
wo genau führe ich diesen befehl aus in der main?


----------



## SlaterB (8. Aug 2011)

wieder gilt:
hast du nur 'rxtxSerial.dll' in \jre\bin abgelegt? wieso die zweite nicht auch?

generell ist natürlich besser, diese Verzeichnisse von Jars und dll usw. frei zu halten,
in Eclipse unter Run > Run Configurations kann man für Eclipse-Starts Argumente angeben

siehe in etwa
How To Use Command Line Arguments in Eclipse
aber das variiert sicher von Version zu Version

Jars unter Build Path, Add External Jar einfügen, vielleicht geht dort auch dll?


----------



## maximilian1 (8. Aug 2011)

ja es sind alle 3 Datein abgelegt.


> Jars unter Build Path, Add External Jar einfügen, vielleicht geht dort auch dll?


hab ich auch gemacht. Ich kann die Datein in meinem Eclipse auch garnicht öffnen ist das vielleicht auch schon ein problem?


----------



## turtle (8. Aug 2011)

Ich halte nicht viel davon die JRE-Umgebung zu "verschmutzen".

Den Java-Library-Path setzt Du unter Eclipse in der Run-Configuration zum Ausführen des Programms.
Auf der Seite Arguments und dort unter VM-Arguments.


----------



## maximilian1 (8. Aug 2011)

ich binde jetzt ja nur die binarys ein muss ich da vielleicht auch noch auf die source verweisen? ich meine der ordner mit den sources ist ja wesentlich größer?


----------



## maximilian1 (8. Aug 2011)

so ich habe das ganze jetzt mal auf nem andern PC gestartet und jetzt läufts. Aber ich bekomme nur kaudawelsch über über die Konsole ausgegeben. Mein Arduino schickt mir sensorwärte also also Zahlen zwischen 0 - 512 wie kann ich über die Methode SerialReader diese werte richtig auslesen?


----------



## maximilian1 (8. Aug 2011)

Ich habe jetzt die richtige Bautrate eingestellt
alt:

```
serialPort.setSerialPortParams(57600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
```

neu:

```
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
```

die ersten Werte sind richtig, aber danach werden sie falsch, sie sind zu klein, was kann da der fehler sein?


----------

