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命令:hexdump

    hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII.八进制.十进制.十六进制格式进行查看. 指令所在路径:/usr/bin/hexdump 命令语法: hexdu ...

  2. SQL-W3School-高级:SQL Date 函数

    ylbtech-SQL-W3School-高级:SQL Date 函数 1.返回顶部 1. SQL 日期 当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配. 只要 ...

  3. java静态标示符static详解

    1.static修饰的变量习惯称为静态变量,static修饰的方法称为静态方法,static修饰的代码块叫做静态代码块. 1)static变量 static变量也称作静态变量,静态变量和非静态变量的区 ...

  4. [Java读书笔记] Effective Java(Third Edition) 第 5 章 泛型

    第 26 条:请不要使用原生态类型 声明中具有一个或多个类型参数的类或者接口,就是泛型(generic). 例如List接口只有单个类型参数E, 表示列表的元素类型.这个接口全称List<E&g ...

  5. http://www.cda.cn/view/25735.html

    通过实例浅析Python对比C语言的编程思想差异 我一直使用 Python,用它处理各种数据科学项目. Python 以易用闻名.有编码经验者学习数天就能上手(或有效使用它). 听起来很不错,不过,如 ...

  6. iOS——sqlite3的使用(iOS嵌入式关系数据库)

    1>添加sqlite3动态库:libsqlite3.dylib,CoreGraphics.framework,UIKit.framework,Foundation.framework 2> ...

  7. Cannon 60D 电池卡在电池槽了,拔不出来怎么办?

    事情是这样的,本来好好的电池在电池槽里的,后来拿去充电了,充满后就准备装回去,然后一个不小心,电池掉地上了,就看了一下没摔爆,所以也没特别留意有没有什么地方摔坏摔瘸角,然后就往相机里塞,突然就发现塞不 ...

  8. Path环境变量的作用

    作用: 当我们要求系统运行一个程序(例如a.exe)而没有告诉它程序所在的完整路径时,系统会先在当前目录寻找是否存在a.exe,如果找到,直接运行:如果没有找到,会去path路径下面找.设置path, ...

  9. MVC框架实例教程 【转载】

    1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...

  10. Java中的一些关键字:static,final,和abstract,interface,以及访问修饰符说明

    1.关键字可以修饰的说明: 关键字 属性(是否可修饰) 方法(是否可修饰) 类(是否可修饰) static 是 是 是 final 是 是 是 abstract 否 是 是 2.关键字的意义: 关键字 ...