转自:http://blog.youkuaiyun.com/kingvan/article/details/53843
做金融终端开发经常需要写一些设备的控制程序,提取出了一个串口操作的基本框架以防日后忘记,当然针对具体串口设备可能要作相关修改。
import java.io.*;
import javax.comm.*;
public class SomeSerial implements SerialPortEventListener {
private byte[] readinfo;
private InputStream in;
private OutputStream out;
private SerialPort serialPort = null;
public SomeSerial(String port) throws Exception {
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(port);
serialPort = (SerialPort)portId.open("Serial_Communication", 2000);
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
public synchronized void serialEvent(SerialPortEvent event) {
switch (event.getEventType()) {
case SerialPortEvent.BI:
break;
case SerialPortEvent.OE:
break;
case SerialPortEvent.FE:
break;
case SerialPortEvent.PE:
break;
case SerialPortEvent.CD:
break;
case SerialPortEvent.CTS:
break;
case SerialPortEvent.DSR:
break;
case SerialPortEvent.RI:
break;
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
synchronized (this) {
try {
int count = in.available();
readinfo = new byte[count];
in.read(readinfo);
}
catch (Exception e) {
e.printStackTrace();
}
this.notify();
}
break;
}
}
public int nstop() throws Exception {
in.close();
out.close();
serialPort.close();
return 0;
}
private void getData() throws Exception {
serialPort.removeEventListener();
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
in = serialPort.getInputStream();
}
public synchronized int doSomething() throws Exception {
try {
synchronized (this) {
out = serialPort.getOutputStream();
//发送指令;
out.write(new byte[] {...});
out.flush();
getData();
wait();
//可继续进行处理
...
}
}
catch (Exception e) {
e.printStackTrace();
return 1;
}
return 0;
}
}