java serial

Hello, I am not very familiar with java. I folloed this tutortalhttp://playground.arduino.cc/Interfacing/Java try to compile the SerialTest.java example, but I keep getting this error public class SerialTest

implements SerialPortEventListener {
^
1 error

Is there something with the example code? Thanks.

Have you got the RXTX jar in your class path?
Post the class path you are using.
Post the FULL java source (using code tags).
Post command you are using to compile the java source.
Post the FULL error message.

I am not sure how muh more info you need.
As I said before, I followed the provided link step by step, downloaded librxtxSerial.jnilib and RXTXcomm.jar then sudo cp them to /Library/Java/Extensions. then export DYLD_LIBRARY_PATH=librxtxSerial.jnilib Is that what you meant by "Post the class path you are using"?

For the java file source code I just copy it then paste to the BBEdit exactly as it is in the tutorial except the port for Mac, mine is /dev/cu.usbmodem1D1330

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.util.Enumeration;

public class SerialTest implements SerialPortEventListener {
SerialPort serialPort;
/** The port we're normally going to use. /
private static final String PORT_NAMES[] = {
"/dev/tty.usbserial-A9007UX1", // Mac OS X
//"/dev/ttyACM0", // Raspberry Pi
//"/dev/ttyUSB0", // Linux
//"COM3", // Windows
};
/
*

  • A BufferedReader which will be fed by a InputStreamReader
  • converting the bytes into characters
  • making the displayed results codepage independent
    /
    private BufferedReader input;
    /
    * The output stream to the port /
    private OutputStream output;
    /
    * Milliseconds to block while waiting for port open /
    private static final int TIME_OUT = 2000;
    /
    * Default bits per second for COM port. */
    private static final int DATA_RATE = 9600;

public void initialize() {
// the next line is for Raspberry Pi and
// gets us into the while loop and was suggested here was suggested http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186
System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0");

CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

//First, Find an instance of serial port as set in PORT_NAMES.
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}

try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);

// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);

// open the streams
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();

// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}

/**

  • This should be called when you stop using the port.
  • This will prevent port locking on platforms like Linux.
    */
    public synchronized void close() {
    if (serialPort != null) {
    serialPort.removeEventListener();
    serialPort.close();
    }
    }

/**

  • Handle an event on the serial port. Read the data and print it.
    */
    public synchronized void serialEvent(SerialPortEvent oEvent) {
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
    try {
    String inputLine=input.readLine();
    System.out.println(inputLine);
    } catch (Exception e) {
    System.err.println(e.toString());
    }
    }
    // Ignore all the other eventTypes, but you should consider the other ones.
    }

public static void main(String args) throws Exception {
SerialTest main = new SerialTest();
main.initialize();
Thread t=new Thread() {
public void run() {
//the following line will keep this app alive for 1000 seconds,
//waiting for events to occur and responding to them (printing incoming messages to console).
try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
}
};
t.start();
System.out.println("Started");
}
}

af1812:
Hello, I am not very familiar with java

In that case why not use Python?

Python - Arduino demo

...R

Assuming you don't have a syntax error then the vast majority of problems when compiling Java programs are due to not having the CLASSPATH correctly specified. There are several ways you can specify the CLASSPATH and the compilation command line and options you use depends on how you want to specify the CLASSPATH. If you post the compilation command used and ALL the resulting output then maybe I or someone else can help you diagnose your problem and help you fix it. Without this I would be wasting my time.

Also, you should use code tags when posting code so that the layout is easy to read and none of the code is interpreted as formatting instructions for this site's formatting engine.

Robin2:
In that case why not use Python?

That is the sort of statement/question that could start a war. Do you really want a war ?

stowite:
That is the sort of statement/question that could start a war. Do you really want a war ?

I think it was / is a perfectly reasonable option addressed to someone who said "I am not very familiar with java"

The OP might find Python easier. Or s/he may have already decided to learn Java in which case sh/e will ignore my comment.

...R

Robin2:
I think it was / is a perfectly reasonable option addressed to someone who said "I am not very familiar with java"

The OP might find Python easier. Or s/he may have already decided to learn Java in which case sh/e will ignore my comment.

...R

Robin2:
I think it was / is a perfectly reasonable option addressed to someone who said "I am not very familiar with java"

The OP might find Python easier. Or s/he may have already decided to learn Java in which case sh/e will ignore my comment.

...R

Your statement suggesting the use of Python implied that Python would be a better language for the OP to use. I don't see how "I am not very familiar with java" makes Python a better option. Everything the OP has written in this thread tells me that he is very new to programming so any programming language will have a steep learning curve.

stowite:
so any programming language will have a steep learning curve.

Some are steeper than others :slight_smile:

I infer from all of this that you are a Java supporter.

...R

for platform-independent Java serial communications I use jSerialComm

For Python I use pySerial

Let the war commence, java is a mind virus with lots of fantastical ideas that fold into a dark dimension filled with higher orders of entropy. In other words, it sounds wonderful and then you try it and end up in hell.

update: what in the world is jSerialComm doing why would it need in the uucp, lock, and tty groups, why not just add root to that list.

ron_sutherland:
In other words, it sounds wonderful and then you try it and end up in hell.

LOL

...R