java串口通信程序(程序及注释).doc

上传人:赵** 文档编号:50929900 上传时间:2022-10-16 格式:DOC 页数:7 大小:39KB
返回 下载 相关 举报
java串口通信程序(程序及注释).doc_第1页
第1页 / 共7页
java串口通信程序(程序及注释).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《java串口通信程序(程序及注释).doc》由会员分享,可在线阅读,更多相关《java串口通信程序(程序及注释).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、indir%system32.properties应该放在以下目录中%JAVA_HOME%/lib%JAVA_HOME%/jre/lib你可以通过编译和运行Sun的例程来验证串口是否可以使用了。JBuilder中安装安装Java Communication API(以下在JBuilder 2006中测试通过)如果你使用JBuilder,那么还需要为JBuilder配置API。一般来说,根据你的JBuilder配置,你也许需要将win32com.dll和.properties安装到相应的目录中,可以参照上述的目录。例如,如果你使用JBuilder附带的JVM的话,你也许需要将win32com.d

3、ll和.properties放到C:BorlandJBuilder2006jdk1.5的相应位置。 我使用的是JCreator,在打开Configure,然后点击option,选中jdk profile然后双击选中的jdk文件,选择edit,在弹出的窗口中选择串口通信包所在的文件(.jar文件),这样配置就算完成了。 以下分别是接收和发送程序,CSDN上搜的,省的自己写了: 发送程序:import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import m.*; class S_Fram

4、e extends Frame implements Runnable,ActionListener /*检测系统中可用的通讯端口类 */ static CommPortIdentifier portId; /*Enumeration 为枚举型类,在util中 */ static Enumeration portList; OutputStream outputStream; /*RS-232的串行口 */ SerialPort serialPort; Thread readThread; Panel p=new Panel(); TextField in_message=new TextFi

5、eld(打开COM1,波特率9600,数据位8,停止位1.); TextArea out_message=new TextArea(); Button btnOpen=new Button(打开串口, 发送数据); Button btnClose=new Button(关闭串口, 停止发送数据); byte data=new byte10240; /*设置判断要是否关闭串口的标志*/ boolean mark; /*安排窗体*/ S_Frame() super(串口发送数据); setSize(200,200); setVisible(true); add(out_message,Center

6、); add(p,North); p.add(btnOpen); p.add(btnClose); add(in_message,South); btnOpen.addActionListener(this); btnClose.addActionListener(this); /R_Frame() end /*点击按扭打开串口.*/ public void actionPerformed(ActionEvent event) if (event.getSource()=btnClose) serialPort.close(); /关闭串口 mark=true; /用于中止线程的run()方法

7、 in_message.setText(串口COM1已经关闭,停止发送数据.); else mark=false; /*从文本区按字节读取数据*/ data=out_message.getText().getBytes(); /*打开串口*/ start(); in_message.setText(串口COM1已经打开,正在每2秒钟发送一次数据.); /actionPerformed() end /*打开串口,并调用线程发送数据*/ public void start() /*获取系统中所有的通讯端口 */ portList=CommPortIdentifier.getPortIdentifi

8、ers(); /* 用循环结构找出串口 */ while (portList.hasMoreElements() /*强制转换为通讯端口类型*/ portId=(CommPortIdentifier)portList.nextElement(); if(portId.getPortType() = CommPortIdentifier.PORT_SERIAL) if (portId.getName().equals(COM1) /*打开串口 */ try serialPort = (SerialPort) portId.open(ReadComm, 2000); catch (PortInUs

9、eException e) /*设置串口输出流*/ try outputStream = serialPort.getOutputStream(); catch (IOException e) /if end /if end /while end /*调用线程发送数据*/ try readThread = new Thread(this); /线程负责每发送一次数据,休眠2秒钟 readThread.start(); catch (Exception e) /start() end /*发送数据,休眠2秒钟后重发*/ public void run() /*设置串口通讯参数*/ try ser

10、ialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); catch (UnsupportedCommOperationException e) /*发送数据流(将数组data中的数据发送出去)*/ try outputStream.write(data); catch (IOException e) /*发送数据后休眠2秒钟,然后再重发*/ try Thread.sleep(2000); if (mark) return; /结束run方法,

11、导致线程死亡 start(); catch (InterruptedException e) /run() end /类S_Frame end public class SendComm public static void main(String args) S_Frame S_win=new S_Frame(); S_win.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); S_win.pack(); 接收程序:import java.awt.*

12、; import java.awt.event.*; import java.io.*; import java.util.*; import m.*; class R_Frame extends Frame implements Runnable,ActionListener,SerialPortEventListener /* 检测系统中可用的通讯端口类 */ static CommPortIdentifier portId; /* Enumeration 为枚举型类,在java.util中 */ static Enumeration portList; InputStream input

13、Stream; /* 声明RS-232串行端口的成员变量 */ SerialPort serialPort; Thread readThread; String str=; TextField out_message=new TextField(上面文本框显示接收到的数据); TextArea in_message=new TextArea(); Button btnOpen=new Button(打开串口); /*建立窗体*/ R_Frame() super(串口接收数据); setSize(200,200); setVisible(true); btnOpen.addActionListe

14、ner(this); add(out_message,South); add(in_message,Center); add(btnOpen,North); /R_Frame() end /*点击按扭所触发的事件:打开串口,并监听串口. */ public void actionPerformed(ActionEvent event) /*获取系统中所有的通讯端口 */ portList=CommPortIdentifier.getPortIdentifiers(); /* 用循环结构找出串口 */ while (portList.hasMoreElements() /*强制转换为通讯端口类型

15、*/ portId=(CommPortIdentifier)portList.nextElement(); if(portId.getPortType() = CommPortIdentifier.PORT_SERIAL) if (portId.getName().equals(COM1) try serialPort = (SerialPort) portId.open(ReadComm, 2000); out_message.setText(已打开端口COM1 ,正在接收数据. ); catch (PortInUseException e) /*设置串口监听器*/ try serialPo

16、rt.addEventListener(this); catch (TooManyListenersException e) /* 侦听到串口有数据,触发串口事件*/ serialPort.notifyOnDataAvailable(true); /if end /if end /while end readThread = new Thread(this); readThread.start(); /线程负责每接收一次数据休眠20秒钟 /actionPerformed() end /*接收数据后休眠20秒钟*/ public void run() try Thread.sleep(20000

17、); catch (InterruptedException e) /run() end /*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/ public void serialEvent(SerialPortEvent event) /*设置串口通讯参数:波特率、数据位、停止位、奇偶校验*/ try serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); catch (UnsupportedCommOperationEx

18、ception e) byte readBuffer = new byte20;try inputStream = serialPort.getInputStream(); catch (IOException e) try /* 从线路上读取数据流 */ while (inputStream.available() 0) int numBytes = inputStream.read(readBuffer); /while end str=new String(readBuffer); /*接收到的数据存放到文本区中*/ in_message.append(str+n); catch (IOException e) /serialEvent() end /类R_Frame end public class ReadComm public static void main(String args) /* 实例化接收串口数据的窗体类 */ R_Frame R_win=new R_Frame(); /* 定义窗体适配器的关闭按钮功能 */ R_win.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); R_win.pack();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁