Java 错误:无法从静态上下文引用非静态方法readstring

Java 错误:无法从静态上下文引用非静态方法readstring,java,oracle,serial-port,Java,Oracle,Serial Port,我试图通过串行端口类通过COM端口发送数据,并通过COM端口接收数据,但出现此问题 多谢各位 import jssc.SerialPort; import jssc.SerialPortException; import jssc.*; public class writeValues { public static void main(String[] args) { SerialPort serialPort = new SerialPort("COM1");

我试图通过串行端口类通过COM端口发送数据,并通过COM端口接收数据,但出现此问题

多谢各位

import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.*;

public class writeValues {


    public static void main(String[] args) {
        SerialPort serialPort = new SerialPort("COM1");
        try {
            //Open port
            String T;
            serialPort.openPort();
            serialPort.setParams(2400,7,2,1, false, true);
            String bytes = serialPort.readString(); //Reads 10 bytes from serial port
            serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR);
            serialPort.writeString("connected.");
            //serialPort.closePort();
        }
        catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }

    public static class PortReader implements SerialPortEventListener {

        @Override
        public void serialEvent(SerialPortEvent event) {
            if(event.isRXCHAR() && event.getEventValue() > 0) {
                try {
                    String receivedData = SerialPort.readString(event.getEventValue());
                    System.out.println("Received response: " + receivedData);
                }
                catch (SerialPortException ex) {

                    System.out.println("Error in receiving string from COM-port: " + ex);
                }
            }
        }

    }

}

由于SerialPort类不是静态的-(您调用了SerialPort=new SerialPort()对吗?)您需要在该实例“SerialPort”上调用readstring,而不是在SerialPort类上调用readstring。你所能做的就是改变

public class writeValues {

public static SerialPort serialPort;
public static void main(String[] args) {
    serialPort = new SerialPort("COM1");
    try {
        //Open port
        String T;
        serialPort.openPort();
        serialPort.setParams(2400,7,2,1, false, true);
        String bytes = serialPort.readString(); //Reads 10 bytes from serial port
        serialPort.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR);
        serialPort.writeString("connected.");
        //serialPort.closePort();
    }
    catch (SerialPortException ex) {
        System.out.println(ex);
    }
}

public static class PortReader implements SerialPortEventListener {

    @Override
    public void serialEvent(SerialPortEvent event) {
        if(event.isRXCHAR() && event.getEventValue() > 0) {
            try {
                String receivedData = serialPort.readString(event.getEventValue());
                System.out.println("Received response: " + receivedData);
            }
            catch (SerialPortException ex) {

                System.out.println("Error in receiving string from COM-port: " + ex);
            }
        }
    }

}

因此,现在我们引用的是serialPort实例,而不是静态类serialPort。希望对您有所帮助:
String receivedData=SerialPort.readString(event.getEventValue())。您正在类(不是实例)上调用
readString()
。这对于非静态方法是不允许的。在
main()。