有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

串口Java RXTX无法读取InputStream

我试图编写的Java串行读取器有问题,问题似乎在于inputstream方法

我的readSerial()方法出现了错误,它给出了一个错误“无法从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

}
}

我还在学习用Java编写代码,非常感谢大家的帮助!我的理解是,从串行输入读取数据是可能的,但我似乎遗漏了一些东西


共 (1) 个答案

  1. # 1 楼答案

    InputStream是一个类;不能对其调用实例方法。类中的输入字段是一个实例,应该用于检索数据