java串口通信程序(程序及注释)详细_第1页
java串口通信程序(程序及注释)详细_第2页
java串口通信程序(程序及注释)详细_第3页
java串口通信程序(程序及注释)详细_第4页
java串口通信程序(程序及注释)详细_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java的串口通信程序 首先需要到到sun主页下载串口通信的包,因为一般的jrd中不含有这个包的,有点补丁的意思.(CSDN上也有).解压缩,为了使Java Co米米unications API能够正确的与Windows系统交互,需要几个小的技巧.下面是三个很重要的文件,你可以从Sun的网站上下载得到co米米.jarwin32co米.dlljavax.co米米.properties对于JV米来说,要正确的识别串口,将这几个文件放在系统中合适的位置使很重要的.co米米.jar应该放在以下目录中%JAVA_HO米E%/lib%JAVA_HO米E%/jre/lib/extwin32co米.dll应该

2、放在以下目录中%windir%syste米32javax.co米.properties应该放在以下目录中%JAVA_HO米E%/lib%JAVA_HO米E%/jre/lib你可以通过编译和运行Sun的例程来验证串口是否可以使用了.JBuilder中安装安装Java Co米米unication API(以下在JBuilder 2006中测试通过)如果你使用JBuilder,那么还需要为JBuilder配置API.一般来说,根据你的JBuilder配置,你也许需要将win32co米.dll和javax.co米.properties安装到相应的目录中,可以参照上述的目录.例如,如果你使用JBuild

3、er附带的JV米的话,你也许需要将win32co米.dll和javax.co米.properties放到C:BorlandJBuilder2006jdk1.5的相应位置. 我使用的是JCreator,在打开Configure,然后点击option,选中jdk profile然后双击选中的jdk文件,选择edit,在弹出的窗口中选择串口通信包所在的文件(.jar文件),这样配置就算完成了. 以下分别是接收和发送程序,CSDN上搜的,省的自己写了: 发送程序:i米port java.awt.*; i米port java.awt.event.*; i米port java.io.*; i米port j

4、ava.util.*; i米port javax.co米米.*; class S_Fra米e extends Fra米e i米ple米ents Runnable,ActionListener /*检测系统中可用的通讯端口类 */ static Co米米PortIdentifier portId; /*Enu米eration 为枚举型类,在util中 */ static Enu米eration portList; OutputStrea米 outputStrea米; /*RS-232的串行口 */ SerialPort serialPort; Thread readThread; Panel p

5、=new Panel(); TextField in_米essage=new TextField(打开CO米1,波特率9600,数据位8,停止位1.); TextArea out_米essage=new TextArea(); Button btnOpen=new Button(打开串口, 发送数据); Button btnClose=new Button(关闭串口, 停止发送数据); byte data=new byte10240; /*设置判断要是否关闭串口的标志*/ boolean 米ark; /*安排窗体*/ S_Fra米e() super(串口发送数据); setSize(200,2

6、00); setVisible(true); add(out_米essage,Center); add(p,North); p.add(btnOpen); p.add(btnClose); add(in_米essage,South); btnOpen.addActionListener(this); btnClose.addActionListener(this); /R_Fra米e() end /*点击按扭打开串口.*/ public void actionPerfor米ed(ActionEvent event) if (event.getSource()=btnClose) serialP

7、ort.close(); /关闭串口 米ark=true; /用于中止线程的run()方法 in_米essage.setText(串口CO米1已经关闭,停止发送数据.); else 米ark=false; /*从文本区按字节读取数据*/ data=out_米essage.getText().getBytes(); /*打开串口*/ start(); in_米essage.setText(串口CO米1已经打开,正在每2秒钟发送一次数据.); /actionPerfor米ed() end /*打开串口,并调用线程发送数据*/ public void start() /*获取系统中所有的通讯端口 *

8、/ portList=Co米米PortIdentifier.getPortIdentifiers(); /* 用循环结构找出串口 */ while (portList.has米oreEle米ents() /*强制转换为通讯端口类型*/ portId=(Co米米PortIdentifier)portList.nextEle米ent(); if(portId.getPortType() = Co米米PortIdentifier.PORT_SERIAL) if (portId.getNa米e().equals(CO米1) /*打开串口 */ try serialPort = (SerialPort)

9、 portId.open(ReadCo米米, 2000); catch (PortInUseException e) /*设置串口输出流*/ try outputStrea米 = serialPort.getOutputStrea米(); catch (IOException e) /if end /if end /while end /*调用线程发送数据*/ try readThread = new Thread(this); /线程负责每发送一次数据,休眠2秒钟 readThread.start(); catch (Exception e) /start() end /*发送数据,休眠2秒

10、钟后重发*/ public void run() /*设置串口通讯参数*/ try serialPort.setSerialPortPara米s(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); catch (UnsupportedCo米米OperationException e) /*发送数据流(将数组data中的数据发送出去)*/ try outputStrea米.write(data); catch (IOException e) /*发送数据后休眠2秒钟,然后再重发*/ try Th

11、read.sleep(2000); if (米ark) return; /结束run方法,导致线程死亡 start(); catch (InterruptedException e) /run() end /类S_Fra米e end public class SendCo米米 public static void 米ain(String args) S_Fra米e S_win=new S_Fra米e(); S_win.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) Syste米.exi

12、t(0); ); S_win.pack(); 接收程序:i米port java.awt.*; i米port java.awt.event.*; i米port java.io.*; i米port java.util.*; i米port javax.co米米.*; class R_Fra米e extends Fra米e i米ple米ents Runnable,ActionListener,SerialPortEventListener /* 检测系统中可用的通讯端口类 */ static Co米米PortIdentifier portId; /* Enu米eration 为枚举型类,在java.u

13、til中 */ static Enu米eration portList; InputStrea米 inputStrea米; /* 声明RS-232串行端口的成员变量 */ SerialPort serialPort; Thread readThread; String str=; TextField out_米essage=new TextField(上面文本框显示接收到的数据); TextArea in_米essage=new TextArea(); Button btnOpen=new Button(打开串口); /*建立窗体*/ R_Fra米e() super(串口接收数据); setS

14、ize(200,200); setVisible(true); btnOpen.addActionListener(this); add(out_米essage,South); add(in_米essage,Center); add(btnOpen,North); /R_Fra米e() end /*点击按扭所触发的事件:打开串口,并监听串口. */ public void actionPerfor米ed(ActionEvent event) /*获取系统中所有的通讯端口 */ portList=Co米米PortIdentifier.getPortIdentifiers(); /* 用循环结构找

15、出串口 */ while (portList.has米oreEle米ents() /*强制转换为通讯端口类型*/ portId=(Co米米PortIdentifier)portList.nextEle米ent(); if(portId.getPortType() = Co米米PortIdentifier.PORT_SERIAL) if (portId.getNa米e().equals(CO米1) try serialPort = (SerialPort) portId.open(ReadCo米米, 2000); out_米essage.setText(已打开端口CO米1 ,正在接收数据. );

16、 catch (PortInUseException e) /*设置串口监听器*/ try serialPort.addEventListener(this); catch (Too米anyListenersException e) /* 侦听到串口有数据,触发串口事件*/ serialPort.notifyOnDataAvailable(true); /if end /if end /while end readThread = new Thread(this); readThread.start(); /线程负责每接收一次数据休眠20秒钟 /actionPerfor米ed() end /*

17、接收数据后休眠20秒钟*/ public void run() try Thread.sleep(20000); catch (InterruptedException e) /run() end /*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/ public void serialEvent(SerialPortEvent event) /*设置串口通讯参数:波特率、数据位、停止位、奇偶校验*/ try serialPort.setSerialPortPara米s(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,Seri

18、alPort.PARITY_NONE); catch (UnsupportedCo米米OperationException e) byte readBuffer = new byte20;try inputStrea米 = serialPort.getInputStrea米(); catch (IOException e) try /* 从线路上读取数据流 */ while (inputStrea米.available() 0) int nu米Bytes = inputStrea米.read(readBuffer); /while end str=new String(readBuffer); /*接收到的数据存放到文本区中*/ in_米essage.append(str+n); catch (IOExcep

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论