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的更多相关文章

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

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

  2. 用Java通过串口发送手机短信

    用Java通过串口发短信其实很简单,因为有现成的类库供我们使用.有底层的类库,也有封装好一点的类库,下面我介绍一下在 Win32 平台下发送短信的方法. 如果你想用更底层的类库开发功能更强大的应用程序 ...

  3. java读写串口数据

    本博文参考自https://www.cnblogs.com/Dreamer-1/p/5523046.html 最近接触到了串口及其读写,在此记录java进行串口读写的过程. 1.导入串口支持包 需要下 ...

  4. Java实现串口通信的小样例

    用Java实现串口通信(windows系统下),须要用到sun提供的串口包 javacomm20-win32.zip.当中要用到三个文件,配置例如以下: 1.comm.jar放置到 JAVA_HOME ...

  5. Java编写串口程序

    用Java编写串口程序一般都会用到这个 http://fizzed.com/oss/rxtx-for-java 根据电脑的情况下载 解压以后有安装文档 For a JDK installation: ...

  6. java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)

     java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...

  7. java实现串口通讯

    一. 准备工作 1. 点击此下载java串口通讯相关工具 2. 将RXTXcomm.jar放到  %JAVA_HOME%\jre\lib\ext\  目录下,工程中引入该jar包 3. 将rxtxSe ...

  8. 【转】Java读取matlab的.mat数据文件

    参考:Java读取mat文件 下载链接:ujmp  jmatio 下载完两个.jar文件之后,如何引用到java项目当中?项目名称->右键->Property->Java Build ...

  9. java读取输入流

    java读取输入流两种 private static byte[] readStream(InputStream in){ if(in==null){ return null; } byte[] bu ...

随机推荐

  1. phpcms后台添加会员报v9_sso_member表缺失

    坑货..表前缀设置 两个地方都有 一个是默认的caches/configs/目录 还有个是phpsso_server/caches/configs/ 如果改了表前缀 这两个地方的database都要改 ...

  2. 极客时间-左耳听风-程序员攻略-Java底层知识

    Java 字节码相关 字节码编程,也就是动态修改或是动态生成 Java 字节码.Java 的字节码相当于汇编,其中的一些细节. Java Zone: Introduction to Java Byte ...

  3. 文件夹中含有子文件夹,修改子文件夹中的图像存储格式(python实现)

    文件夹中含有子文件夹,修改子文件夹中的图像存储格式,把png图像改为jpg图像,python代码如下: import os import cv2 filePath = 'C:\\Users\\admi ...

  4. when i import skimage,it occurred --"cannot import name '_validate_lengths'"

    how to sovle this prolem? 1)with the administrator user to run cmd 2)imput and run : pip install --u ...

  5. Docker通过挂载安装mysql

    一.安装 mkdir -p ./docker/mysql cd docker/ cd mysql/ mkdir conf mkdir data mkdir logs  mkdir mysql-file ...

  6. Docker daemon.json 的配置项目合集

    这几天看了一点docker相关的东西, 在学习中: 看了下园友的blog 感觉很好 这里 学习一下. https://www.cnblogs.com/pzk7788/p/10180197.html 其 ...

  7. Lucene 全文检索

    基于 lucene 8 1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search) 全文检索就是先分词创建索引,再执行搜索 ...

  8. Eureka 服务中心

    old                                                                                           使用Eure ...

  9. php 栈、 出栈、入栈

    最近在面试的时候被问到栈,回来做个总结,希望对大家有帮助 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压 ...

  10. jupyter lab 安装

    在windows下安装jupyter 特别简单 首先你需要有Anaconda or python的环境变量,这里我就不说怎么安装环境变量了,网上一大堆教程 启动黑窗口,下载jupyter pip in ...