最近在写java串口编程,网上一搜大多数就是JavaComm 、 RXTX资料;
起初Sun没有为Linux提供JavaComm的现实(从2006开始才有的),导致了免费软件RxTx库的开发。
RxTx支持许多平台而不仅仅是Linux。它可以与JavaComm结合起来使用(RxTx提供了特定硬件驱动),也可以独立使用。
但是在使用的时候发现,我们引用RXTXcomm.jar 或者 comm.jar 但 对于64位和32位系统会引用不同xxx.dll文件,配置起来不方便,最终采用jssc.jar包
会自动选择对应的系统,引用相应的配置,一个jar包搞定........
附上个人实例: 启动串口,关闭
/**
*
* 打开串口
* 1 载波检测 DCD(Data Carrier Detect)
* 2 接收数据 RXD(Received Data)
* 3 发送数据 TXD(Transmit Data)
* 4 数据终端准备好 DTR(Data Terminal Ready)
* 5 信号地 SG(Signal Ground)
* 6 数据准备好 DSR(Data Set Ready)
* 7 请求发送 RTS(Request To Send)
* 8 清除发送 CTS(Clear To Send)
* 9 振铃提示 RI(Ring Indicator)
*
*/
public void open() {
serialPort=new SerialPort(_config.comName);
boolean b;
try {
b = serialPort.openPort();
if(!b) {
System.out.println("Open " + _config.comName + " failed....");
return;
}else{
System.out.println("Open " + _config.comName + " success......"+_config.comDtr+" RTS:"+_config.comRts);
}
serialPort.setParams(_config.getComRate(), _config.getComDataBit(),_config.getComStopBit(), _config.getComParity());
serialPort.addEventListener(this);
serialPort.setDTR(_config.comDtr);
serialPort.setRTS(_config.comRts);
} catch (SerialPortException e) {
isError=true;
message=ErrorLogger.getStackTrace(e);
_eLogger.Write("串口打开失败:"+message);
System.err.println("串口打开失败:"+message);
}
}
/**
*
* 关闭串口
*
*/
public void stop() {
if(null!=serialPort){
try {
serialPort.closePort();
} catch (SerialPortException e) {
isError=true;
message=ErrorLogger.getStackTrace(e);
_eLogger.Write("串口关闭失败:"+message);
System.err.println("串口关闭失败:"+message);
}
}
}
监听数据 ; 实现 implements SerialPortEventListener 接口
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR()) {//If data is available
if (event.getEventValue() > 0) {
try {
byte[] data = serialPort.readBytes(event
.getEventValue());
resultStr=new String(data);
System.out.println("bytes: " + data.length + " Received : "+ resultStr);
} catch (SerialPortException e) {
isError=true;
message=ErrorLogger.getStackTrace(e);
_eLogger.Write("监听数据异常:"+message);
System.err.println("监听数据异常:"+message);
}
}
} else if (event.isCTS()) {
} else if (event.isDSR()) {
}
}