在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件。

(1)win32com.dll 要放在jdk\jre\bin目录下。

(2)comm.jar 和javax.comm.properties要放在jdk\jre\lib目录下。

下面是如何使用SerialPort的Demo:

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package tina; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.TooManyListenersException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.comm.CommPortIdentifier;
import javax.comm.NoSuchPortException;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
import javax.comm.UnsupportedCommOperationException;
import javax.swing.JOptionPane; /**
*
* @author Tina
*/
public class DemoCom implements SerialPortEventListener { private static final String PORT_NAME = "COM4"; //串口号
private static final int PORT_BAUDRATE = 115200; //波特率
private static DemoCom instance;
private final SerialPort mSerialPort;
private final PrintWriter mWriter;
private final InputStream mInputStream;
private OnMsgArrivedListener mListener;
private final StringBuffer buffer = new StringBuffer(); public interface OnMsgArrivedListener { //收到字符
void OnMsgArrived(char c); } private DemoCom(CommPortIdentifier portId, int baudrate) throws PortInUseException, UnsupportedCommOperationException, IOException {
mSerialPort = (SerialPort) portId.open("DemoCom", baudrate);
mSerialPort.setSerialPortParams(baudrate,
SerialPort.DATABITS_8, //Data Bits
SerialPort.STOPBITS_1, //Stop Bits
SerialPort.PARITY_NONE); //无校验
mSerialPort.notifyOnDataAvailable(true); OutputStream mOutputStream = mSerialPort.getOutputStream();
mInputStream = mSerialPort.getInputStream();
mWriter = new PrintWriter(mOutputStream);
} public static DemoCom getInstance() {
if (instance == null) {
CommPortIdentifier portId;
try {
portId = (CommPortIdentifier) CommPortIdentifier.getPortIdentifier(PORT_NAME);
instance = new DemoCom(portId, PORT_BAUDRATE);
} catch (NoSuchPortException ex) {
JOptionPane.showMessageDialog(null, "没有找到串口" + PORT_NAME + ",请确认USB线是否连接好!");
System.exit(0);
} catch (PortInUseException ex) {
JOptionPane.showMessageDialog(null, "串口" + PORT_NAME + "被占用,请关闭其他可能占用的应用软件!");
System.exit(0);
} catch (UnsupportedCommOperationException ex) {
JOptionPane.showMessageDialog(null, "串口" + PORT_NAME + "打开失败:" + ex.getMessage());
System.exit(0);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "串口" + PORT_NAME + "打开失败:" + ex.getMessage());
System.exit(0);
}
}
return instance;
} @Override
public void serialEvent(SerialPortEvent spe) {
if (spe.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
while (mInputStream.available() > 0) {
//处理数据
int c = mInputStream.read();
buffer.append((char) c);
//这里只是将数据传到其他需要监听串口数据的地方
if (mListener != null) {
mListener.OnMsgArrived((char) c);
} }
} catch (IOException ex) {
Logger.getLogger(PortFixture.class.getName()).log(Level.SEVERE, null, ex);
}
}
} public String sendAndGet(String command, int delayMs) {
//发送命令
if (mWriter != null) {
mWriter.println(command);
mWriter.flush();
}
//延时
try {
Thread.sleep(delayMs);
} catch (InterruptedException ex) {
Logger.getLogger(PortFixture.class
.getName()).log(Level.SEVERE, null, ex);
}
//查看回复的数据
if (!buffer.toString().isEmpty()) { //如果buffer非空
String str = buffer.toString();
System.out.println(buffer.toString());
buffer.delete(0, buffer.length());//读完之后清空
return str;
} else {
return "";
}
} public void send(String command) {
buffer.delete(0, buffer.length());//发送之前清空 try {
Thread.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(PortFixture.class.getName()).log(Level.SEVERE, null, ex);
}
//发送命令
if (mWriter != null) {
mWriter.println(command);
mWriter.flush();
}
} public void open() {
try {
mSerialPort.addEventListener(this);
} catch (TooManyListenersException ex) {
Logger.getLogger(PortFixture.class
.getName()).log(Level.SEVERE, null, ex);
} //打开串口后,做一些处理
if (!sendAndGet("reset", 1000).toLowerCase().contains("ok")) {
JOptionPane.showMessageDialog(null, "无法复位!");
System.exit(0);
}
} public void close() {
if (mWriter != null) {
mWriter.close();
} if (mInputStream != null) {
try {
mInputStream.close();
} catch (IOException ex) {
Logger.getLogger(PortFixture.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (mSerialPort != null) {
mSerialPort.close();
}
} public void setOnMsgArrivedListener(OnMsgArrivedListener listener) {
mListener = listener;
}
}

Java 串口通信的更多相关文章

  1. java串口通信丢包

    java串口通信丢包问题 前段时间公司要求做一个java应用和pos串口通信的工具,调试好了好久每次都是只能接收到一包数据后续的数据都丢失了. 经过修改读写的流的缓存大小亲测都正常代码如下: seri ...

  2. java 串口通信 代码

    下面是我自己实现的串口接收的类,串口发送比较简单,就直接发送就可以了.下面的这个类可以直接使用. package com.boomdts.weather_monitor.util; import ja ...

  3. Java串口通信具体解释

    序言 说到开源,恐怕非常少有人不挑大指称赞.学生通过开源码学到了知识,程序猿通过开源类库获得了别人的成功经验及可以按时完毕手头的project,商家通过开源软件赚到了钱……,总之是皆大欢喜.然而开源软 ...

  4. Java串口通信详细解释

    前言 说到开源.恐怕非常少有人不挑大指称赞. 学生通过开源码学到了知识,程序猿通过开源类库获得了别人的成功经验及可以按时完毕手头的project,商家通过开源软件赚到了钱……,总之是皆大欢喜. 然而开 ...

  5. Java串口通信--------基于RXTX (附带资源地址)

    最近帮老师做了一个小项目,一个牧场公司想用传感器收集一些环境信息,记录到数据库里去,然后加以分析查看.这里面和传感器通信用到了串口通信,我也是接触了一下,把用到的东西分享出来. 准备工作: RXTX: ...

  6. Java串口通信 RXTX 解决过程

    背景介绍: 由于第一次用Java与硬件通信,网上查了许多资料,在这进行整理,便于以后学习.本人串口测试是USB串口设备连接电脑,在设备管理器中找到端口名称(也可以通过一些虚拟串口工具模拟). 下面主要 ...

  7. java 串口通信实现流程

    1.下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java 2.下载下来的包解压后按照说明放到JAVA_HOME即JAVA的安装路径下面去 ...

  8. Java 串口通信 Ubuntu

    说一下我的操作过程吧 在Windows上先用阿猫串口网络调试助手,进行调试: 在网上找Java代码,我选择的是RXTXcomm,网上代码很多,基本都一样. 在Windows电脑上把rxtx压缩包中的r ...

  9. 【Java】基于RXTX的Java串口通信

    本篇内容参考转载自https://blog.csdn.net/kong_gu_you_lan/article/details/80589859 环境搭建 下载地址:http://fizzed.com/ ...

随机推荐

  1. [No000076]用Eclipse编写python(配置PyDev插件)

    下载,安装python解释器 地址:https://www.python.org/downloads/ 下载,安装java jdk 地址:http://www.oracle.com/technetwo ...

  2. Ubuntu14.04下配置固定IP

    实验室需要构建静态网站作为个人知识管理工具,每个人要求都有属于自己的静态网站进行知识积累和交流.但是实验室的路由有时候会关闭,重启后给每台机器重新分配ip,因此为了方便访问每台主机,需要设置静态ip. ...

  3. 国内外前端(js)开发框架对比

    国内外前端开发框架对比 首先我们先对目前国内外主流前端开发框架做一个基本的了解,之后再对他们进行一个直观的对比. Bootstrap Bootstrap(http://www.bootcss.com) ...

  4. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  5. Chrome开发者工具详解

    http://www.cnblogs.com/LibraThinker/p/5948448.html http://www.cnblogs.com/LibraThinker/p/5981346.htm ...

  6. Spring+Quartz实现定时任务

    MessageMgr.java package com.uyao.bid.common.message; import com.pominfo.framework.exception.PomInfoE ...

  7. .Net Core Linux centos7行—vscode开发,linux部署运行

    前面搭建好啦linux运行环境,下面搭建windows下的开发环境.并完成调试 参考地址:https://www.microsoft.com/net/core#windows. 按照步骤来就好.安装. ...

  8. jQuery之XML的加载和解析

    1.XML(eXtensible Markup Language)即可扩展标记语言,与HTML一样,都是SGML标准通用语言.语法如下: 任何起始标签都必须有一个结束标签. 可以采用另一种简化语法,即 ...

  9. 结构体里的“位域”(bit-field)结构

    首先看一个题目: #include <iostream> using namespace std; #include <string.h> typedef struct AA{ ...

  10. CodeForces 548D 单调栈

    Mike and Feet Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Subm ...