实现了,多个监听多个串口设备连接 public void init(ParamConfig paramConfig, CallBackInterface callback) throws Exception {
this.callBackFun = callback;
this.paramConfig = paramConfig;
// 获取系统中所有的通讯端口
portList = CommPortIdentifier.getPortIdentifiers();
// 记录是否含有指定串口
boolean isExsist = false;
// 循环通讯端口
while (portList.hasMoreElements()) {
commPortId = portList.nextElement();
// 判断是否是串口
if (commPortId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
// 比较串口名称是否是指定串口
if (paramConfig.getSerialNumber().equals(commPortId.getName())) {
// 串口存在
isExsist = true;
// 打开串口
try {
// open:(应用程序名【随意命名】,阻塞时等待的毫秒数)
serialPort = (SerialPort) commPortId.open(Object.class.getSimpleName(), 2000);
// 设置串口监听
serialPort.addEventListener(this);
// 设置串口数据时间有效(可监听)
serialPort.notifyOnDataAvailable(true);
// 设置串口通讯参数:波特率,数据位,停止位,校验方式
serialPort.setSerialPortParams(paramConfig.getBaudRate(), paramConfig.getDataBit(),
paramConfig.getStopBit(), paramConfig.getCheckoutBit());
} catch (PortInUseException e) {
try {
throw new CustomException("端口被占用");
} catch (CustomException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (TooManyListenersException e) {
try {
throw new CustomException("监听器过多");
} catch (CustomException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (UnsupportedCommOperationException e) {
try {
throw new CustomException("不支持的COMM端口操作异常");
} catch (CustomException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
// 结束循环
break;
}
}
}
// 若不存在该串口则抛出异常
if (!isExsist) {
try {
throw new CustomException("不存在该串口!");
} catch (CustomException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
评论