基本介紹
- 外文名:RXTX
- 解釋:開源java類庫
- 協定遵循:LGPL
- 適用作業系統:Windows,Linux,Mac os X,Solaris
簡介,配置方法,
簡介
RXTX是個提供串口和並口通信的開源java類庫,由該項目發布的文檔均遵循LGPL協定。
針對x86體系結構的Linux作業系統平台,RXTX的部署包括下面幾個文檔:
* RXTXcomm.jar RXTX自己的實現
* librxtxSerial.so 由調用的底層串口庫文檔
* librxtxParallel.so 由RXTXcomm.jar調用的底層並口庫文檔
驅動的類配置文檔,內容是Driver=gnu.io.RXTXCommDriver
配置方法
為了使我們的程式使用RXTX作為串口通訊的底層API,需要配置他的環境。仍然以Linux系統平台為例:
1.複製librxtxSerial.so,librxtxParallel.so到$JAVA_HOME/lib/$(ARCH)/
2.複製RXTXcomm.jar到$JAVA_HOME/ext/,或在套用程式啟動的CLASSPATH中包含RXTXcomm.jar
3.定義驅動類後將放在套用程式的根目錄下
RXTX的使用上和sun提供的comm.jar基本相同,編程時最明顯的不同是要包含的包名由javax.comm.*改成了gnu.io.*。下面是我們環境監測系統中封裝的一個232串口驅動類部分原始碼,使用RXTX作為串口通訊類庫。
Windows系統配置如下:
1. 將RXTXcomm.jar放到<jre_home>\lib\ext\下
2. 把rxtxParallel.dll,rxtxSerial.dll這兩個放到你java的當前目錄下(選windows下的)
3. 例子仍然採用原來SUN官方<ReadSimple.java>實例(change all references from 'javax.comm' to 'gnu.io' )
=============================
以下為RXTX的簡單套用代碼,僅參考。
import java.io.*;
import java.util.*;
import gnu.io.*;
public class RFIDReader implements Runnable,SerialPortEventListener{
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
public static void main(String[] args){
init();
}
public static void init(){
portList=CommPortIdentifier.getPortIdentifiers();
while(portList.hasMoreElements()){
portId=(CommPortIdentifier)portList.nextElement();
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL){
if(portId.getName().equals("COM1")){
RFIDReader reader=new RFIDReader();
System.out.println("COM1 start!");
}
}
}
}
public RFIDReader(){
try{
serialPort=(SerialPort)portId.open("Sunder",2000);
}catch(PortInUseException e){System.out.println(e);}
try{
inputStream=serialPort.getInputStream();
}catch(IOException e){System.out.println(e);}
try{
serialPort.addEventListener(this);
}catch(TooManyListenersException e){System.out.println(e);}
serialPort.notifyOnDataAvailable(true);
try{
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
}catch(UnsupportedCommOperationException e){System.out.println(e);}
readThread=new Thread(this);
readThread.start();
}
public void run(){
try{
Thread.sleep(20000);
}catch(InterruptedException e){System.out.println(e);}
}
public void serialEvent(SerialPortEvent event){
switch(event.getEventType()){
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer=new byte[20];
try{
while(inputStream.available()>0){
int numBytes=inputStream.read(readBuffer);
}
System.out.println(new String(readBuffer));
}catch(IOException e){System.out.println(e);}
break;
}
}
}