1
votes

I want to first write to serial port. for that i am using a usb to serial ftdi cable. The cable is connected to COM4. Running Windows 7 64-bit

a) Using the RXTX project. http://rxtx.qbang.org/wiki/index.php/Main_Page

To utilize the RXTX I tried doing that by following these instructions

  1. download rxtx-2.1-7-bins-r2.zip
  2. unzip it
  3. copy rxtxSerial.dll into c:\program files\java\jre-version\bin dir
  4. copy RXTXcomm.jar into c:\program files\java\jre-version\lib\ext dir
  5. change all references from 'javax.comm' to 'gnu.io'
  6. recompile

Here is my code:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package twowayserialcomm;

/**
 *
 * @author HP
 */

import java.io.InputStream;
import java.io.OutputStream;
import gnu.io.SerialPort;
import gnu.io.CommPortIdentifier;
import gnu.io.CommPort;

public class TwoWaySerialComm {

    /**
     * @param args the command line arguments
     * 
     */
    void connect( String portName ) throws Exception {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier( portName );

        if( portIdentifier.isCurrentlyOwned() ) {
            System.out.println( "Error: Port is currently in use" );
        } else {
            int timeout = 10000;
            CommPort commPort = portIdentifier.open( this.getClass().getName(), timeout );

            if( commPort instanceof SerialPort ) {
                SerialPort serialPort = ( SerialPort )commPort;
                serialPort.setSerialPortParams( 9600,
                                    SerialPort.DATABITS_8,
                                    SerialPort.STOPBITS_1,
                                    SerialPort.PARITY_NONE );

                //InputStream in = serialPort.getInputStream();
                OutputStream outputStream = serialPort.getOutputStream();
                outputStream.write( 53 ); 
                //outputStream.write( 1 ); 
                //outputStream.write( 20 ); 
                //outputStream.write( 0 ); 
                //outputStream.write( 83 );

                //CommPort port = serialPort;
                System.out.println( "Write done" );
                //( new Thread( new SerialReader( in,port  ) ) ).start();
            } else {
                System.out.println( "Error: Only serial ports are handled by this example." );
            }
        }
    }
    public static void main(String[] args) {
        try {
            TwoWaySerialComm alex = new TwoWaySerialComm();
            //( new TwoWaySerialComm() ).connect( "COM4" );
            alex.connect("COM4");
        } catch( Exception e ) {
            e.printStackTrace();
        }
    }
}

When running:

run:
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
    at twowayserialcomm.TwoWaySerialComm.connect(TwoWaySerialComm.java:26)
    at twowayserialcomm.TwoWaySerialComm.main(TwoWaySerialComm.java:61)
C:\Users\HP\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

b) by using the javax.comm. libraries When doing that i got following erros

run:
javax.comm.NoSuchPortException
    at javax.comm.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:105)
    at twowayserialcomm.TwoWaySerialComm.connect(TwoWaySerialComm.java:26)
    at twowayserialcomm.TwoWaySerialComm.main(TwoWaySerialComm.java:61)

and here is the project window from netbeans

Serial Port Java

enter image description here

1
The error that you get means that the dll could not be found in java.library.path, so you need to set the system property java.library.path to the path corresponding to the folder that contains the lib, check thisNicolas Filotto
Thanks Nicolas, that worked. How do I mark your comment as an answer?Alexandros81
good news, no you can't mark a comment as an answer you can only up vote or flag a comment.Nicolas Filotto
put the rxtxSerial.dll on C:\Windows\System32Filipe Bernardes

1 Answers

0
votes

The error that you get means that the dll could not be found in java.library.path, so you need to set the system property java.library.path to the path corresponding to the folder that contains the library, by adding -Djava.library.path="C:\path\to\your\dll" as VM Options

More details about how to set the path to a dll in NetBeans