I am having an issue with the Java serial reader I am trying to write, the issue seems to lie with the inputstream method...
I get the error with my readSerial() method, it gives me the error "Cannot make a static reference to the non-static method available() from the type InputStream"
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.TooManyListenersException;
import java.io.*;
import java.util.*;
import gnu.io.*;
// Our RXTX package
public class basicinterface implements Runnable, SerialPortEventListener {
private SerialPort serialPort ; //defining serial port object
private CommPortIdentifier portId = null; //my COM port
private static final int TIME_OUT = 2000; //time in milliseconds
private static final int BAUD_RATE = 9600; //baud rate to 9600bps
private BufferedReader input; //declaring my input buffer
private OutputStream output; //declaring output stream
private String name; //user input name string
Scanner inputName; //user input name
//method initialize
private void initialize(){
CommPortIdentifier ports = null; //to browse through each port identified
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); //store all available ports
while(portEnum.hasMoreElements()){ //browse through available ports
ports = (CommPortIdentifier)portEnum.nextElement();
//following line checks whether there is the port i am looking for and whether it is serial
if(ports.getPortType() == CommPortIdentifier.PORT_SERIAL&&ports.getName().equals("COM7")){
System.out.println("COM port found:COM6");
portId = ports; //initialize my port
break; }
}
//if serial port am looking for is not found
if(portId==null){
System.out.println("COM port not found");
System.exit(1);
}
}
//end of initialize method
//connect method
private void portConnect(){
//connect to port
try{
serialPort = (SerialPort)portId.open(this.getClass().getName(),TIME_OUT); //down cast the comm port to serial port
//give the name of the application
//time to wait
System.out.println("Port open succesful: COM6");
//set serial port parameters
serialPort.setSerialPortParams(BAUD_RATE,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
}
catch(PortInUseException e){
System.out.println("Port already in use");
System.exit(1);
}
catch(NullPointerException e2){
System.out.println("COM port maybe disconnected");
}
catch(UnsupportedCommOperationException e3){
System.out.println(e3.toString());
}
//input and output channels
try{
//defining reader and output stream
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();
//adding listeners to input and output streams
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
serialPort.notifyOnOutputEmpty(true);
}
catch(Exception e){
System.out.println(e.toString());
}
}
//end of portConnect method
private byte[] readBuffer = new byte[400];
private void readSerial() {
try {
int availableBytes = InputStream.available();
if (availableBytes > 0) {
// Read the serial port
InputStream.read(readBuffer, 0, availableBytes);
// Print it out
System.out.println(
new String(readBuffer, 0, availableBytes));
}
} catch (IOException e) {
}
}
//readWrite method
public void serialEvent(SerialPortEvent evt) {
byte[] readBuffer = new byte[400];
if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) { //if data available on serial port
readSerial();
}
}
//end of serialEvent method
//closePort method
private void close(){
if(serialPort!=null){
serialPort.close(); //close serial port
}
input = null; //close input and output streams
output = null;
}
//main method
public static void main(String[] args) {
basicinterface myTest = new basicinterface(); //creates an object of the class
myTest.initialize();
myTest.portConnect();
System.out.println("Started");
while(1>0); //wait till any activity
}
//end of main method
//end of SerialTest class
@Override
public void run() {
// TODO Auto-generated method stub
}
}
I am still learning to code in Java and all help is appreciated! My understanding is that the reading from serial input is possible but I seem to be missing something.
InputStream
is a class; you can't call instance methods on it. The input field in your class is an instance and should be used to retrieve the data!