java读取串口-mfz-rxtx-2.2-20081207-win-x86
1.下载jar包
RXTXcomm.jar
2.实现代码
package main; import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*; import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTextField; import gnu.io.*;
import main.*;
import resources.HardWareProperties;
import javax.swing.JButton; class R_Frame extends JDialog implements Runnable, SerialPortEventListener {
/* 检测系统中可用的通讯端口类 */
static CommPortIdentifier portId;
/* Enumeration 为枚举型类,在java.util中 */
static Enumeration portList;
InputStream inputStream;
/* 声明RS-232串行端口的成员变量 */
SerialPort serialPort; Thread readThread;
byte[] readBuffer =new byte[2000];
public String str = "";
TextField out_message = new TextField("上面文本框显示接收到的数据");
TextArea in_message = new TextArea();
static R_Frame R_win = null; public static void main(String[] args) throws IOException { if (R_win == null) { /* 实例化接收串口数据的窗体类 */
R_win = new R_Frame();
/* 定义窗体适配器的关闭按钮功能 */
ViewUtils.showCentre(R_win);
R_win.setAlwaysOnTop(true);
R_win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
R_win.serialPort.removeEventListener();
R_win.serialPort.close();
ViewUtils.closeWarn(R_win);
R_win = null;
}
});
} else {
R_win.setVisible(true);
R_win.setAlwaysOnTop(true);
R_win.in_message.setText("");
} } /* 建立窗体 */
R_Frame() throws IOException { setSize(327, 315);
setVisible(true);
try {
actionPerformed();
} catch (UnsupportedCommOperationException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
in_message.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) { // InputEvent.listenEnterKeyToAnyInput(text_certificate,
// lblNewLabel_2);
serialPort.removeEventListener();
serialPort.close();
dispose();
}
}
});
this.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {// 失去焦点时
setVisible(true);
} public void focusGained(FocusEvent e) {// 获得焦点时 }
}); getContentPane().add(out_message, "South");
in_message.setEditable(false);
getContentPane().add(in_message, "Center"); JButton btnNewButton = new JButton("\u624B\u52A8\u8BFB\u53D6");
btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// 向端口写数据
OutputStream out;
try {
out = serialPort.getOutputStream();
out.write("Q<CR>".getBytes());
//out.write("Q<CR><LF>".getBytes());
out.flush();
JOptionPane.showMessageDialog(null, "读取成功!", "错误提示!", JOptionPane.ERROR_MESSAGE);
} catch (IOException e1) {
JOptionPane.showMessageDialog(null, "读取失败!", "错误提示!", JOptionPane.ERROR_MESSAGE);
} }
});
getContentPane().add(btnNewButton, BorderLayout.WEST);
} // R_Frame() end /* 点击按扭所触发的事件:打开串口,并监听串口. */
public void actionPerformed() throws IOException, UnsupportedCommOperationException {
/* 获取系统中所有的通讯端口 */ portList = CommPortIdentifier.getPortIdentifiers(); /* 用循环结构找出串口 */
while (portList.hasMoreElements()) { /* 强制转换为通讯端口类型 */
portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portId.getName().equals(HardWareProperties.COM)) {
try {
serialPort = (SerialPort) portId.open("ReadComm", 1000); out_message.setText("正在读取数据..... "); } catch (PortInUseException e) {
JOptionPane.showMessageDialog(null, "打开串口出错!", "错误提示!", JOptionPane.ERROR_MESSAGE);
}
/* 设置串口监听器 */
try {
serialPort.setSerialPortParams(Integer.parseInt(HardWareProperties.HZ),
Integer.parseInt(HardWareProperties.LENGTH),
Integer.parseInt(HardWareProperties.SDOPSIZE),
Integer.parseInt(HardWareProperties.CHECK));
serialPort.setRTS(true);
serialPort.setDTR(true);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
// SendThread sendThread= new SendThread();
// sendThread.serialPort=serialPort;
// sendThread.start();
// ReadThread readThread=new ReadThread();
// readThread.serialPort=serialPort;
// readThread.in_message=in_message;
// readThread.start(); // Read();
} catch (TooManyListenersException e) {
JOptionPane.showMessageDialog(null, "监听出错!", "错误提示!", JOptionPane.ERROR_MESSAGE);
}
/* 侦听到串口有数据,触发串口事件 */
// serialPort.notifyOnDataAvailable(true); } // if end
} // if end
} // while end
readThread = new Thread(this);
readThread.start(); // 线程负责每接收一次数据休眠20秒钟 } // actionPerformed() end /* 接收数据后休眠0.2秒钟 */
public void run() { } // run() end @Override /* 串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中 */
public void serialEvent(SerialPortEvent event) {
try {
Read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // serialEvent() end public void Read() throws IOException { byte[] readBuffer = new byte[128]; // try {
// Thread.sleep(5000);
// } catch (InterruptedException e1) {
// e1.printStackTrace();
// }
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "打开流出错!", "错误提示!", JOptionPane.ERROR_MESSAGE);
}
int numBytes=0;
try {
/* 从线路上读取数据流 */
while (inputStream.available() > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
numBytes = inputStream.read(readBuffer);
} // while end String str1 = new String(readBuffer);
StringBuffer str2 = new StringBuffer();
str2.append(str1);
str2.append("读入位流数:"+numBytes);
in_message.setText("读入位流数:"+numBytes+str2.toString());
inputStream.close();
/* 接收到的数据存放到文本区中 */
// if(str1.contains("\n") || str1.contains("\r\n") || str1.contains("\r") || str1.contains("\t")){
// String[] strs = str.split(",");
// str+=str1;
// in_message.setText(str);
//
// str="";
// }
// else {
// str+=str1;
// JOptionPane.showMessageDialog(null, "包头:"+str1, "有数据到了!", JOptionPane.ERROR_MESSAGE);
// }
// in_message.setText(str);
//for (int i = 0; i < str.length(); i++) {
// if(str.substring(i, 1)=="\r")
// {
// in_message.setText(str.substring(0,i));
// str=str.substring(i+1);
// break;
// }
//}
// 向端口写数据
// OutputStream out = serialPort.getOutputStream();
// out.write(str.getBytes());
// out.flush();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "读流出错!", "错误提示!", JOptionPane.ERROR_MESSAGE);
}
}
} // 类R_Frame end
java读取串口-mfz-rxtx-2.2-20081207-win-x86的更多相关文章
- Java串口通信 RXTX 解决过程
背景介绍: 由于第一次用Java与硬件通信,网上查了许多资料,在这进行整理,便于以后学习.本人串口测试是USB串口设备连接电脑,在设备管理器中找到端口名称(也可以通过一些虚拟串口工具模拟). 下面主要 ...
- 用Java通过串口发送手机短信
用Java通过串口发短信其实很简单,因为有现成的类库供我们使用.有底层的类库,也有封装好一点的类库,下面我介绍一下在 Win32 平台下发送短信的方法. 如果你想用更底层的类库开发功能更强大的应用程序 ...
- java读写串口数据
本博文参考自https://www.cnblogs.com/Dreamer-1/p/5523046.html 最近接触到了串口及其读写,在此记录java进行串口读写的过程. 1.导入串口支持包 需要下 ...
- Java实现串口通信的小样例
用Java实现串口通信(windows系统下),须要用到sun提供的串口包 javacomm20-win32.zip.当中要用到三个文件,配置例如以下: 1.comm.jar放置到 JAVA_HOME ...
- Java编写串口程序
用Java编写串口程序一般都会用到这个 http://fizzed.com/oss/rxtx-for-java 根据电脑的情况下载 解压以后有安装文档 For a JDK installation: ...
- java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)
java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...
- java实现串口通讯
一. 准备工作 1. 点击此下载java串口通讯相关工具 2. 将RXTXcomm.jar放到 %JAVA_HOME%\jre\lib\ext\ 目录下,工程中引入该jar包 3. 将rxtxSe ...
- 【转】Java读取matlab的.mat数据文件
参考:Java读取mat文件 下载链接:ujmp jmatio 下载完两个.jar文件之后,如何引用到java项目当中?项目名称->右键->Property->Java Build ...
- java读取输入流
java读取输入流两种 private static byte[] readStream(InputStream in){ if(in==null){ return null; } byte[] bu ...
随机推荐
- MyBatis——特殊传参问题小结
近期在写系统报表API的时候遇到MyBatis中的一些特殊写法: 1. 传入两个参数(一般情况下我们更多的是传入一个对象或者map) public List<MarketVehicleModel ...
- hadoop1.2.1安装配置
原文地址 环境:ubuntu13 使用的用户为普通用户.如:用户ru jdk安装略 1.安装ssh (1) sudo apt-get install openssh-server (2)配置ssh面密 ...
- oracle数据库使用PL/sql导入excel数据
1.打开PL/SQL工具,菜单进入 工具>ODBC导入器(菜单列表倒数第二): 2.连接数据库与选择导入的excel文件表: 3.选择导入的表以及excel与数据库表字段之间的对应关系:
- webpack 用 webpack-parallel-uglify-plugin 加速打包报错
从新拉了份代码.npm install .npm run dev 都没有问题,但是npm run build 就报上面的错误了 查了好多资料,都没有解决上面的问题,也不知道是哪里出了问题,但是可以肯定 ...
- PAT 甲级 1030 Travel Plan (30 分)(dijstra,较简单,但要注意是从0到n-1)
1030 Travel Plan (30 分) A traveler's map gives the distances between cities along the highways, to ...
- ubuntu kylin 18.04安装docker笔记
删除原有的docker应用(如果有的话): sudo apt-get remove docker docker-engine docker.io 更新一下: sudo apt-get update 下 ...
- leetcode 将一个二维矩阵进行90度旋转
import numpy as np import math if __name__ == '__main__': def rotate(matrix): n = len(matrix[0]) for ...
- 【VS开发】VC下加载JPG/GIF/PNG图片的两种方法
1.用API OleLoadPicture来加载JPG.GIF格式的图片(注:不支持PNG格式,另外GIF只能加载第一帧,且不支持透明) OleLoadPicture 函数实际上创建了一个IPictu ...
- python xlrd模块
一.什么是xlrd模块? Python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 二.使用介绍 1.常用单元格中的数据类型 类型 含义 e ...
- kafka producer interceptor拦截器(五)
producer在发送数据时,会经过拦截器和序列化,最后到达相应的分区.在经过拦截器时,我们可以对发送的数据做进步的处理. 要正确的使用拦截器需要以下步骤: 1.实现拦截器ProducerInterc ...