【发布时间】:2015-10-01 08:54:46
【问题描述】:
我正在尝试从 com 端口获取一些数据,与我正在写入数据的端口相同,但事实证明它很难读取。我设法找到一个简单的代码片段来读取它,但现在,我只读取零。可能是什么原因?
我在下面发送我的代码,并解释它们的预期用途。
private void ReadFromComPortActionPerformed(java.awt.event.ActionEvent evt) {
try {
String text = EmulatorInput.getText();
sendData(text, "COM4");
String out_Text = Arrays.toString(read());
EmulatorOutput.setText(out_Text);
System.out.println(out_Text);
} catch (IOException ex) {
Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
}
}
这是一个 JButton,方法名和参数已由 NetBeans 创建。 Code firsts 从输入面板获取文本作为字符串,将其与 com 端口名称一起发送,连接到该端口,并通过它打开输入/输出流,然后将从输入面板获取的字符串写入 OutputStream。然后,我创建一个新字符串,命名为out_Text,并使用read() 方法从端口读取数据。
这里是读取方法;
private byte[] read() throws IOException {
byte[] buffer = new byte[16];
int total = 0, read = 0;
while (total <= 16 && (read = input.read(buffer, total, 16-total)) > 0) {
total += read;
}
return buffer;
}
在我发布的第一个方法使用read() 将其收敛为一个可以打印为字节数组的字符串后,我最终只得到一个零字节。
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
我对此感到非常困惑,因为我确定我会写信给端口。我什至监控了我写的内容,可以看到当我使用程序向com端口写入数据时,它接收到的数据增加了。
如果有不清楚的地方或者需要更多代码,请通过 cmets 联系。
谢谢。
【问题讨论】:
-
始终检查您的通讯端口设置。波特率、数据位、奇偶校验等。然后确保您发送的命令实际上会从目标生成响应。
-
我已经监视了我打开的 COM 端口,看看我是否正在发送一些数据。最终,我做到了,因为每当我运行
echo message > COM#(请注意# 代表COM 端口号)它表明字节正在通过。我也在 java 代码中做到了这一点,并确认我正在发送数据。确切的问题是,在我发送的第二个代码段中,我无法进入。因为它总是从输入中读取 0(InputStream 类型,创建为input = port.getInputStream()另外,我的波特率为 9600,数据位为 8,没有奇偶校验,并得到 1 个停止位。
标签: java serial-port inputstream outputstream