微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java串行通信-> EventListener问题

如何解决Java串行通信-> EventListener问题

我正在尝试使用Java串行通信从串行设备读取测量值。任务是将9的 ASCII 代码(十进制为57)发送到设备,它将返回测量的当前值。首先,我想确保正确发送了一些值。到目前为止,该连接有效,当我更改getListeningEvents()方法以检查SerialPort.LISTENING_EVENT_DATA_WRITTEN时,它仍然有效,并显示了我的短语“可读”,但是在这种情况下,这仅表明已传输数据。 / p>

因此,该号码已正确发送,但是在打印“已写”后我无法得到答案,并且程序卡住了。 在许多示例中,我看到了notifyOnDataAvailable()类的方法SerialPort,但是我在文档中找不到它了,而且我不确定是否必须使用任何其他方法来初始化侦听器。所以我的问题是,我的程序(尤其是EventListener)有什么问题,它无法接收或识别返回的值?

这是我的代码

public class ConnectionNew implements SerialPortDataListener {

    private  SerialPort serialPort = null;
    private java.io.OutputStream output = null;
    private InputStream input = null;
    private SerialPort [] ports = null;
    
    public static void main(String[] args) {
        ConnectionNew connect = new ConnectionNew();
        connect.connectPort();
        connect.initIOStream();
        connect.initListener();
        connect.writeData();

    }
    
    public void connectPort() {
        ports = SerialPort.getCommPorts();
        System.out.println("Select a port: ");
        int i = 1;
        for (SerialPort port : ports) {
            System.out.println(i++ + ": " + port.getSystemPortName());
        }
        Scanner s = new Scanner(system.in);
        int chosenPort = s.nextInt();
        serialPort = ports[chosenPort - 1];
        if (serialPort.openPort()) {
            System.out.println("Port opened successfully");
        } else {
            System.out.println("Unable to open the port");
            return;
        }
    }
    
    public boolean initIOStream(){
        input = serialPort.getInputStream();
        output = serialPort.getoutputStream();
        System.out.println("Streams Connected");
        return true;
    }
    
    public void initListener() {
        serialPort.addDataListener(this);
        
    }
    
    public void writeData(){
        try {
            
            output.write(57);
            output.flush();
            
            System.out.println("Written");
        } catch (IOException e) {
            
            e.printstacktrace();
        }
        
    }
    @Override
    public int getListeningEvents() {
        return  SerialPort.LISTENING_EVENT_DATA_RECEIVED;
    }

    @Override
    public void serialEvent(SerialPortEvent arg0) {
        System.out.println("Reading possible");
        
    }

}

我很高兴收到任何提示,谢谢!!

解决方法

您需要从事件中获取数据:

public void serialEvent(SerialPortEvent e) {
    byte[] data = e.getReceivedData​();
    // ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。