java串行口编程_WINDOWS环境下JAVA串口RXTX编程DEMO

本文介绍如何在Windows环境下使用Java RXTX库进行串口编程。通过将RXTXcomm.jar和rxtxSerial.dll放置在正确目录,然后创建一个实现了SerialPortEventListener的类`SimpleRead`,监听并处理串口数据。程序成功运行,但存在乱码和非面向对象设计等问题。
摘要由CSDN通过智能技术生成

copy RXTXcomm.jar into your c:\program files\java\jre-version\lib\ext dir

把下载包中Windows\i368-mingw32\rxtxSerial.dll 放到你%java_home%\jre\bin下面

把下载包中RXTXcomm.jar放到%java_home%\jre\lib\ext下面

OK,可以写程序了

/**

*

*/

package cn.zhongxiaogang.test;

import java.io.*;

import java.util.*;

import gnu.io.*;

public class SimpleRead implements SerialPortEventListener { //SerialPortEventListener 监听器,我的理解是独立开辟一个线程监听串口数据

static CommPortIdentifier portId; //串口通信管理类

static Enumeration portList;   //已经连接上的端口的枚举

InputStream inputStream; //从串口来的输入流

OutputStream outputStream;//向串口输出的流

SerialPort serialPort;     //串口的引用

public SimpleRead() {

try {

serialPort = (SerialPort) portId.open("myApp", 2000);//打开串口名字为myapp,延迟为2毫秒

} catch (PortInUseException e) {

}

try {

inputStream = serialPort.getInputStream();

outputStream = serialPort.getOutputStream();

} catch (IOException e) {

}

try {

serialPort.addEventListener(this);      //给当前串口天加一个监听器

} catch (TooManyListenersException e) {

}

serialPort.notifyOnDataAvailable(true); //当有数据时通知

try {

serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8,   //设置串口读写参数

SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

} catch (UnsupportedCommOperationException e) {

}

}

public void serialEvent(SerialPortEvent event) {//SerialPortEventListener 的方法,监听的时候会不断执行

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://当有可用数据时读取数据,并且给串口返回数据

byte[] readBuffer = new byte[20];

try {

while (inputStream.available() > 0) {

int numBytes = inputStream.read(readBuffer);

}

outputStream.write("xiaogang".getBytes());

System.out.println(new String(readBuffer));

} catch (IOException e) {

}

break;

}

}

public static void main(String[] args) {

try {

portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口

while (portList.hasMoreElements()) {

portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {//判断如果端口类型是串口

if (portId.getName().equals("COM3")) { //判断如果COM3端口已经启动就连接

SimpleRead reader = new SimpleRead(); //实例一个

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

程序调试成功,不过还有很多问题,比如有乱码,还有程序不面向对象,etc.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值