欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java接收串口数据,java接收串口,Java使用javax.

来源: javaer 分享于  点击 484 次 点评:38

Java接收串口数据,java接收串口,Java使用javax.


Java使用javax.comm库接收串口数据,使用单独的线程,实时处理接收数据

[Java]代码

import java.io.*;import java.util.*;import javax.comm.*;public class SerialBean implements Runnable,SerialPortEventListener{    String PortName;    int baud;    CommPortIdentifier portId;    SerialPort serialPort;    static OutputStream out;    static InputStream in;    String Buf=null;// 缓存一条最新信息    boolean hasData=false;// 标志有无新数据    StringBuilder buf=new StringBuilder(128);    Thread readThread;    public SerialBean(int PortID,int baud)    {        PortName="COM"+PortID;        this.baud=baud;    }    public int Initialize()    {        int InitSuccess=1;        int InitFail=-1;        try        {            portId=CommPortIdentifier.getPortIdentifier(PortName);            try            {                serialPort=(SerialPort)portId.open("Serial_Communication",2000);                serialPort.setSerialPortParams(this.baud,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);                serialPort.addEventListener(this);                serialPort.notifyOnDataAvailable(true);            }            catch(PortInUseException e)            {                return InitFail;            }            catch(TooManyListenersException e)            {                return InitFail;            }            catch(UnsupportedCommOperationException e)            {                return InitFail;            }            try            {                in=serialPort.getInputStream();                out=serialPort.getOutputStream();            }            catch(IOException e)            {                return InitFail;            }        }        catch(NoSuchPortException e)        {            return InitFail;        }        readThread=new Thread(this);        readThread.start();        return InitSuccess;    }    public boolean hasData()    {        return hasData;    }    public String ReadPort()    {        if(hasData)        {            this.hasData=false;            return this.Buf;        }        else            return null;    }    @SuppressWarnings("deprecation")    public void ClosePort()    {        if(readThread!=null )            readThread.stop();        if(serialPort!=null)            serialPort.close();    }    @Override    public void serialEvent(SerialPortEvent event)    {        /**         * 事件类型:         *          * BI -通讯中断.    CD -载波检测.    CTS -清除发送.    DATA_AVAILABLE -有数据到达.            * DSR-数据设备准备好.    FE -帧错误.    OE -溢位错误.    OUTPUT_BUFFER_EMPTY         * -输出缓冲区已清空.    PE -奇偶校验错. RI - 振铃指示.         */        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:                try                {                    char b;                    while(in.available()>0)                    {                        b=(char)in.read();                        buf.append(b);                    }                    int beg=0,end=0;                    for(int i=0;;i++)                    {                        if(buf.length()<2)                        {                            return;                        }                        if(buf.charAt(0)=='\r'&&buf.charAt(1)=='\n')// 以回车换行开头                        {                            beg=2;                        }                        else                        // 不以换行开头                        {                            beg=0;                        }                        end=buf.indexOf("\r\n",beg);                        if(end==-1)// 未接受完一整条信息                            break;                        Buf=buf.substring(beg,end);// 截取数据                        buf.delete(0,end+2);// 删除已用数据                        System.out.printf("--%s--\n",Buf);                        this.hasData=true;                    }                    // System.out.println(con);                }                catch(IOException e)                {                }                break;        }    }    public void run()    {        try        {            Thread.sleep(2000);        }        catch(InterruptedException e)        {        }    }}
相关栏目:

用户点评