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. linux下什么工具可以用来纠正文件中的拼写和排版错误?

    答: ispell,官网在此

  2. php+mysql模糊查询功能

    一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有 ...

  3. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_08-freemarker基础-空值处理

    把stus注释掉 正常访问就会报错 第20行 这里的stus为空,所以造成了这个错误. 非空判断 不为空用双问号来判断 <#if stus??><#list stus as stu& ...

  4. Outlook2016中如何实现自动密送

    Outlook2016中如何实现自动密送 下面的方案您可以参考一下: 1)在Outlook里面键入Alt+F11打开VBA编辑器: 2)激活左边的工程面板,展开并双击上面的“Project (VbaP ...

  5. sqlmap工具介绍

    工具介绍 sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft ...

  6. 集群架构01.Nginx初步安装配置

    1.切换163yum 源,环境介绍 [root@moban ~]# cat /etc/redhat-release CentOS release 6.5 (Final) mv CentOS-Base. ...

  7. NOIP 2015:信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  8. Web应用搭建

    Web应用搭建 *资料库 http://www.oschina.net/project/tag/308/server-suite * web环境 http://www.freebuf.com/tool ...

  9. solr的使用

    一,下载,安装 https://lucene.apache.org/solr/ 二, mac下使用 下载二进制包后,解压 step 1 进入solr目录: cd solr-8.2.0 step 2 进 ...

  10. ssh出现公钥错误问题的解决方法

      问题:主机app1推送公钥时,公钥判定错误   原因:之前推过公钥,用的是ip而不是主机名(即hosts文件中的对应关系不对),导致app1的~/.ssh/known_hosts中的公钥对不上. ...