如何在Java中使用jssc读取数据frome串口?

问题描述:

我使用jssc库从串口读取和写入数据。如何在Java中使用jssc读取数据frome串口?

package serial; 

import jssc.*; 

public class Serial { 

public static void main(String[] args) { 
    String[] portNames = null; 
    portNames = SerialPortList.getPortNames(); 
    for (String string : portNames) { 
     System.out.println(string); 
    } 

    if (portNames.length == 0) { 
     System.out.println("There are no serial-ports"); 
    } else { 

     SerialPort serialPort = new SerialPort("com2"); 
     try { 
      serialPort.openPort(); 

      serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, 
        SerialPort.PARITY_NONE); 
      serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT); 

      PortReader portReader = new PortReader(serialPort); 

      serialPort.addEventListener(portReader, SerialPort.MASK_RXCHAR); 

      serialPort.writeString("S"); 

      serialPort.closePort(); 
     } catch (Exception e) { 
      System.out.println("There are an error on writing string to port т: " + e); 
     } 
    } 
} 
} 

package serial; 

import jssc.SerialPort; 
import jssc.SerialPortEvent; 
import jssc.SerialPortEventListener; 
import jssc.SerialPortException; 

public class PortReader implements SerialPortEventListener { 

SerialPort serialPort; 
public PortReader(SerialPort serialPort) { 
    this.serialPort = serialPort; 
} 

@Override 
public void serialEvent(SerialPortEvent event) { 
    System.out.println("started"); 
    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.addEventListener(portReader,SerialPort.MASK_RXCHAR);

 serialPort.writeString("S"); 

     serialPort.closePort(); // <----- You are closing port here