gpt4 book ai didi

Java 串行通信 -> EventListener 问题

转载 作者:行者123 更新时间:2023-12-04 03:55:21 24 4
gpt4 key购买 nike

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

所以号码发送正确,但我无法得到答案,程序在打印“Written”后卡住了。在许多示例中,我看到了 SerialPort 类的方法 notifyOnDataAvailable(),但我在文档中找不到它了,我不确定是否必须使用任何其他方法来初始化监听器。所以我的问题是,我的程序有什么问题,尤其是我的 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​();
// ...
}

关于Java 串行通信 -> EventListener 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64010784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com