Java串口通信程序程序及注释 可编译运行.docx

上传人:b****6 文档编号:6889072 上传时间:2023-01-12 格式:DOCX 页数:8 大小:16.81KB
下载 相关 举报
Java串口通信程序程序及注释 可编译运行.docx_第1页
第1页 / 共8页
Java串口通信程序程序及注释 可编译运行.docx_第2页
第2页 / 共8页
Java串口通信程序程序及注释 可编译运行.docx_第3页
第3页 / 共8页
Java串口通信程序程序及注释 可编译运行.docx_第4页
第4页 / 共8页
Java串口通信程序程序及注释 可编译运行.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Java串口通信程序程序及注释 可编译运行.docx

《Java串口通信程序程序及注释 可编译运行.docx》由会员分享,可在线阅读,更多相关《Java串口通信程序程序及注释 可编译运行.docx(8页珍藏版)》请在冰豆网上搜索。

Java串口通信程序程序及注释 可编译运行.docx

Java串口通信程序程序及注释可编译运行

Java的串口通信程序

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

%JAVA_HOME%/lib

%JAVA_HOME%/jre/lib/ext

%windir%system32

%JAVA_HOME%/lib

%JAVA_HOME%/jre/lib

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

JBuilder中安装JavaCommunicationAPI

(以下在JBuilder2006中测试通过)

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

\Borland\JBuilder2006\jdk

1.5的相应位置。

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

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

发送程序:

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

importjava.util.*;

classS_FrameextendsFrameimplementsRunnable,ActionListener{

/*检测系统中可用的通讯端口类*/

staticCommPortIdentifierportId;

/*Enumeration为枚举型类,在util中*/

staticEnumerationportList;

OutputStreamoutputStream;

/*RS-232的串行口*/

SerialPortserialPort;

ThreadreadThread;

Panelp=newPanel();

TextFieldin_message=newTextField("打开COM1,波特率9600,数据位8,停止位

1.");

TextAreaout_message=newTextArea();

ButtonbtnOpen=newButton("打开串口,发送数据");

ButtonbtnClose=newButton("关闭串口,停止发送数据");

bytedata[]=newbyte[10240];

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

booleanmark;

/*安排窗体*/

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

/*点击按扭打开串口.*/

publicvoidactionPerformed(ActionEventevent){

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

/*打开串口,并调用线程发送数据*/

publicvoidstart(){

/*获取系统中所有的通讯端口*/

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

/*设置串口输出流*/

try{

outputStream=serialPort.getOutputStream();}catch(IOExceptione){}

}//ifend

}//ifend

}//whileend

/*调用线程发送数据*/

try{

readThread=newThread(this);

//线程负责每发送一次数据,休眠2秒钟

readThread.start();}catch(Exceptione){}

}//start()end

/*发送数据,休眠2秒钟后重发*/

publicvoidrun(){

/*设置串口通讯参数*/

try{

serialPort.setSerialPortParams(9600,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);}catch(UnsupportedCommOperationExceptione){}

/*发送数据流(将数组data[]中的数据发送出去)*/

try{

outputStream.write(data);}catch(IOExceptione){}

/*发送数据后休眠2秒钟,然后再重发*/

try{Thread.sleep

(2000);

if(mark)

{return;//结束run方法,导致线程死亡}start();}catch(InterruptedExceptione){}

}//run()end

}//类S_Frameend

publicclassSendComm

{publicstaticvoidmain(Stringargs[])

{S_FrameS_win=newS_Frame();

S_win.addWindowListener(newWindowAdapter()

{publicvoidwindowClosing(WindowEvente)

{System.exit

(0);}

});

S_win.pack();}}

接收程序:

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

importjava.util.*;

classR_FrameextendsFrameimplements

Runnable,ActionListener,SerialPortEventListener{/*检测系统中可用的通讯端口类*/

staticCommPortIdentifierportId;

/*Enumeration为枚举型类,在java.util中*/

staticEnumerationportList;

InputStreaminputStream;

/*声明RS-232串行端口的成员变量*/

SerialPortserialPort;

ThreadreadThread;

Stringstr="";

TextFieldout_message=newTextField("上面文本框显示接收到的数据");TextAreain_message=newTextArea();

ButtonbtnOpen=newButton("打开串口");

/*建立窗体*/

R_Frame(){super("串口接收数据");

setSize(200,200);

setVisible(true);

btnOpen.addActionListener(this);

add(out_message,"South");

add(in_message,"Center");

add(btnOpen,"North");

}//R_Frame()end

/*点击按扭所触发的事件:

打开串口,并监听串口.*/

publicvoidactionPerformed(ActionEventevent){/*获取系统中所有的通讯端口*/

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);

out_message.setText("已打开端口COM1,正在接收数据.....");}catch(PortInUseExceptione){}

/*设置串口监听器*/

try{

serialPort.addEventListener(this);}catch(TooManyListenersExceptione){}

/*侦听到串口有数据,触发串口事件*/

serialPort.notifyOnDataAvailable(true);

}//ifend

}//ifend

}//whileend

readThread=newThread(this);

readThread.start();//线程负责每接收一次数据休眠20秒钟

}//actionPerformed()end

/*接收数据后休眠20秒钟*/

publicvoidrun(){

try{

Thread.sleep

(200);}catch(InterruptedExceptione){}

}//run()end

/*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/publicvoidserialEvent(SerialPortEventevent){

/*设置串口通讯参数:

波特率、数据位、停止位、奇偶校验*/

try

{serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);}

catch(UnsupportedCommOperationExceptione){}

byte[]readBuffer=newbyte[20];

try{

inputStream=serialPort.getInputStream();}catch(IOExceptione){}

try{/*从线路上读取数据流*/

while(inputStream.available()>0){

intnumBytes=inputStream.read(readBuffer);

}//whileend

str=newString(readBuffer);

/*接收到的数据存放到文本区中*/

in_message.append(str+"\n");}catch(IOExceptione){}

}//serialEvent()end

}//类R_Frameend

publicclassReadComm{publicstaticvoidmain(Stringargs[]){/*实例化接收串口数据的窗体类*/

R_FrameR_win=newR_Frame();

/*定义窗体适配器的关闭按钮功能*/

R_win.addWindowListener(newWindowAdapter()

{publicvoidwindowClosing(WindowEvente)

{System.exit

(0);}

});

R_win.pack();}}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1