// 初始化串口驱动
private boolean initCommDriver_win32() {
try {
System.loadLibrary("win32com ");
String driverName = "com.sun.comm.Win32Driver ";
CommDriver driver = (CommDriver) Class.forName(driverName).newInstance();
driver.initialize();
return true;
} catch (Throwable e) {
MessageDialog.openInformation(null, "initDriver ", "initDriver_Err_Win32Com ");
e.printStackTrace();
return false;
}
}
// 打开串口
private boolean OpenComm(String PortName) {
// 获取指定的COM端口
try {
portIdentifier = CommPortIdentifier.getPortIdentifier(PortName);
} catch (NoSuchPortException e) {
e.printStackTrace();
return false;
}
// 打开端口(3秒打不开则失败)
try {
serialPort = (SerialPort) portIdentifier.open(this.getTitle(), 3000);
} catch (PortInUseException e) {
MessageDialog.openInformation(null, "OpenComm ", "Open_Err ");
e.printStackTrace();
return false;
}
// 设置端口通讯参数 (波特率 = 9600,数据位 = 8,停止位 = 1 ,校验位 =奇校验)
try {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_ODD);
} catch (UnsupportedCommOperationException e) {
MessageDialog.openInformation(null, "OpenComm ", "Set_Port ");
e.printStackTrace();
return false;
}
// 设置输入流
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
MessageDialog.openInformation(null, "OpenComm ", "Set_InputStream ");
e.printStackTrace();
return false;
}
// 设置输出流
try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {
MessageDialog.openInformation(null, "OpenComm ", "Set_OutputStream ");
e.printStackTrace();
return false;
}
// 当串口有数据时通知
serialPort.notifyOnDataAvailable(true);
// 当串口通讯中断时通知
serialPort.notifyOnBreakInterrupt(true);
// 接收数据超时设置
try {
serialPort.enableReceiveTimeout(30);
} catch (UnsupportedCommOperationException e) {
e.printStackTrace();
return false;
}
// 设置一个串口数据暂存区
strBuffer = new StringBuffer();
// 给当前串口添加一个监听器 DisposeSerialportMessage
try {
serialPort.addEventListener(new SerialPortEventListener() {
public void serialEvent(SerialPortEvent e) {
disposeSerialportMessage(e);
}
});
} catch (TooManyListenersException e) {
e.printStackTrace();
return false;
}
return true;
}