Nmishra
Posts: 12
Joined: Sun Mar 11, 2018 3:09 pm

Could not find or load main class SerialTestGET.

Mon Mar 12, 2018 1:32 pm

I am trying to execute the program on Linux , raspberry pi and getting error

Code: Select all

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;
import java.net.HttpURLConnection;
import java.net.URL;

public class SerialTestGET implements SerialPortEventListener {
    SerialPort serialPort;
    static int sensorValue = 0;
    /** 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);
                sendGet(inputLine);
            } catch(Exception e) {
                System.err.println(e.toString());
                serialPort.removeEventListener();
                serialPort.close();
            }
        }
        // Ignore all the other eventTypes, but you should consider the other ones.
    }

    // HTTP GET request
    public void sendGet(String inputLine) throws Exception {

        try {
            //if difference is more than 3 then send data to SAP HANA
            if (inputLine != null && inputLine.length() > 0 && Math.abs(sensorValue - Integer.parseInt(inputLine)) > 3) {

                sensorValue = Integer.parseInt(inputLine);
                //Considering that A001 sensor is connection with this raspberry pie for now
                //we can even pass this with command line but for simplicityhardcoding it
                //Replace with your HANA server URL and port number
                String url = " ";

                url = url + inputLine;

                URL obj = new URL(url);
                HttpURLConnection con = (HttpURLConnection) obj.openConnection();

                // optional default is GET
                con.setRequestMethod("GET");

                //add request header
                //con.setRequestProperty("User-Agent", USER_AGENT);
                int responseCode = con.getResponseCode();
                if (responseCode == 200) {
                    System.out.println("OK value:" + inputLine);
                } else {
                    System.out.println("Error: Response code " + responseCode);
                }

            }
            System.out.println("OK value: Less than 3");
        } catch(Exception e) {
            System.err.println(e.toString());
            serialPort.removeEventListener();
            serialPort.close();
        }

    }

    public static void main(String[] args)
    throws Exception {
        SerialTestGET main = new SerialTestGET();
        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");
    }
}
All required files are placed in specified folders.
Attachments
path.jpg
execution of file
path.jpg (48.13 KiB) Viewed 2321 times
file.jpg
file path
file.jpg (10.89 KiB) Viewed 2321 times

User avatar
jostle
Posts: 16
Joined: Tue Mar 06, 2018 6:26 am

Re: Could not find or load main class SerialTestGET.

Tue Mar 13, 2018 1:15 am

You may have your CLASSPATH environment variable set to something that does not include the current directory. It is generally NOT a good idea to have CLASSPATH set at all. See
https://docs.oracle.com/javase/8/docs/t ... spath.html

Check its value by typing

Code: Select all

echo $CLASSPATH
if it has a value try clearing it by typing

Code: Select all

unset CLASSPATH
and try running again.


The warning you are getting from the compiler is because you specify '-target 1.6'. The compiler expects to be given a 1.6 runtime jar file in the '-bootclasspath' option.
If you really need java6 compatible class files, add

Code: Select all

-bootclasspath <PATH_TO_JAVA6>/rt.jar
to your compile options. Otherwise just remove the -source and -target options.

See the Cross-Compilation Options at
https://docs.oracle.com/javase/8/docs/t ... javac.html
for more details.
Have Fun ...

Nmishra
Posts: 12
Joined: Sun Mar 11, 2018 3:09 pm

Re: Could not find or load main class SerialTestGET.

Tue Mar 13, 2018 3:38 am

I tried checking the class path value and found its empty .
Attachments
class.JPG
CLASS PATH value
class.JPG (18.69 KiB) Viewed 2288 times

Nmishra
Posts: 12
Joined: Sun Mar 11, 2018 3:09 pm

Re: Could not find or load main class SerialTestGET.

Tue Mar 13, 2018 10:01 am

Hi,
Just for reference:

There is a sample java file TestJ.java, I created to test if Java is working with "HelloWorld" message.

TestJ.java is executing properly.

Nmishra
Posts: 12
Joined: Sun Mar 11, 2018 3:09 pm

Solved: Could not find or load main class SerialTestGET.

Wed Mar 14, 2018 12:20 pm

Solved : used below statement and it executed

java -Djava.library.path=/usr/lib/jni -cp /usr/share/java/RXTXcomm.jar:. SerialTestGET

Return to “Java”