【发布时间】:2016-03-16 08:57:54
【问题描述】:
我有一种方法可以将文件内容写入串行端口,然后等待确认消息。我正在尝试使用均匀的侦听器,但是没有消息打印回控制台。 但是,当我在没有事件侦听器的情况下手动以缓慢的速度阅读消息时,消息会很好地返回。 这是我的代码:
public class portConnector {
private static SerialPort SP;
public portConnector(String pName){
SP = new SerialPort(pName);
}
public static byte[] read(String name) throws IOException{
File file = new File(name);
byte[] bytes = new byte[(int) file.length()];
FileInputStream inputStream = new FileInputStream(file);
inputStream.read(bytes);
inputStream.close();
return bytes;
}
public void push2rec (File[] LOF){
try {
SP.openPort();
SP.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
int mask = SerialPort.MASK_RXCHAR;
SP.setEventsMask(mask);
SP.addEventListener(new PortReader(), SerialPort.MASK_RXCHAR);
for (File f : LOF){
byte[] rd = read(f.getName());
SP.writeBytes(rd);
}
SP.closePort();
}
catch (SerialPortException ex) {System.out.println(ex);}
catch (IOException ex) {System.out.println(ex);}
}
private static class PortReader implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() == 10) {
try {
byte[] buffer = SP.readBytes(10);
for (byte b : buffer){
System.out.format("%02X ", b);
}
System.out.println("");
}
catch (SerialPortException ex) {
System.out.println("Error in receiving string from COM-port: " + ex);
}
}
}}}
“addEventListener”的位置是否正确? 谁能帮我解决这个问题。 任何帮助,将不胜感激。谢谢你。
【问题讨论】:
-
你在使用
javax.comm.*类吗? -
不,我正在使用 jssc。
-
我明白了。我会尝试删除
&& event.getEventValue()==10,然后使用byte[] buffer = SP.readBytes(),以使其不那么僵硬。我也不会将SP.closePort()作为主要流程的一部分。您可以关闭事件侦听器中的端口,从而使其成为有条件的,而不是自动的。在您的代码中,您在发送文件内容后立即关闭它(取消注册侦听器)。 -
好的。如何将 closePort() 写入事件侦听器?
-
试过了。没用。我看不出
getvalue == 10是如何影响我的阅读的。消息假设为 10 字节长,getvalue 不应该检查该长度吗?
标签: java serial-port addeventlistener event-listener jssc