java串口通信程序(程序及注释)-13页word资料

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java的串口通信程序

首先需要到到sun主页下载串口通信的包,因为一般的jrd中不含有这个包的,有点补丁的意思。(CSDN上也有)。解压缩,为了使Java Communications API能够正确的与Windows系统交互,需要几个小的技巧。下面是三个很重要的文件,你可以从Sun的网站上下载得到

comm.jar

win32com.dll

javaxm.properties

对于JVM来说,要正确的识别串口,将这几个文件放在系统中合适的位置使很重要的。

comm..jar应该放在以下目录中

%JAVA_HOME%/lib

%JAVA_HOME%/jre/lib/ext

win32com.dll应该放在以下目录中

%windir%system32

javax.properties应该放在以下目录中

%JAVA_HOME%/lib

%JAVA_HOME%/jre/lib

你可以通过编译和运行Sun的例程来验证串口是否可以使用了。

JBuilder中安装安装Java Communication API

(以下在JBuilder 2006中测试通过)

如果你使用JBuilder,那么还需要为JBuilder配置API。

一般来说,根据你的JBuilder配置,你也许需要将win32com.dll和javax.properties安装到相应的目录中,可以参照上述的目录。例如,如果你使用JBuilder附带的JVM的话,你也许需要将win32com.dll和javax.properties放到C:\Borland\JBuilder2006\jdk1.5的相应位置。

我使用的是JCreator,在打开Configure,然后点击option,选中jdk profile然后双击选中的jdk文件,选择edit,在弹出的窗口中选择串口通信包所在的文件(.jar文件),这样配置就算完成了。

以下分别是接收和发送程序,CSDN上搜的,省的自己写了:发送程序:

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.util.*;

import javaxm.*;

class S_Frame 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 TextField("打开COM1,波特率9600,数据位8,停止位1.");

TextArea out_message=new TextArea();

Button btnOpen=new Button("打开串口, 发送数据");

Button btnClose=new Button("关闭串口, 停止发送数据");

byte data[]=new byte[10240];

/*设置判断要是否关闭串口的标志*/

boolean mark;

/*安排窗体*/

S_Frame()

{ super("串口发送数据");

setSize(200,200);

setVisible(true);

add(out_message,"Center");

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()方法

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.getPortIdentifiers();

/* 用循环结构找出串口 */

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 (PortInUseException e) { }

/*设置串口输出流*/

try {

相关文档
最新文档