如果读串口出现乱码,则:

1.可能是波特率设置不对

2.可能是数据编码格式不对

  1. import gnu.io.*;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.WindowAdapter;
  7. import java.awt.event.WindowEvent;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.util.Enumeration;
  11. import java.util.TooManyListenersException;
  12.  
  13. /**
  14. * Created by gbr on 13-12-12.
  15. */
  16.  
  17. class R_Frame extends Frame implements Runnable, ActionListener, SerialPortEventListener{
  18. static CommPortIdentifier portId;
  19. static Enumeration portList;
  20. InputStream inputStream;
  21.  
  22. SerialPort serialPort;
  23. Thread readThread;
  24. String str = "";
  25. TextField out_message = new TextField("上面文本框显示接收到的数据");
  26. TextArea in_message = new TextArea();
  27. Button btnOpen = new Button("Open Comm");
  28. R_Frame(){
  29. super("串口接收数据");
  30. setSize(200, 200);
  31. setVisible(true);
  32. btnOpen.addActionListener(this);
  33. add(out_message, "South");
  34. add(in_message, "Center");
  35. add(btnOpen, "North");
  36. }
  37.  
  38. public void actionPerformed(ActionEvent event){
  39. portList = CommPortIdentifier.getPortIdentifiers();
  40. while (portList.hasMoreElements()){
  41. portId = (CommPortIdentifier)portList.nextElement();
  42. if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
  43. if (portId.getName().equals("COM8")){
  44. try{
  45. serialPort = (SerialPort)portId.open("ReadComm", 2000);
  46. out_message.setText("已经打开串口COM8,正在接收数据...");
  47. } catch (PortInUseException e) {
  48. out_message.setText("端口已被占用!");
  49. e.printStackTrace();
  50. }
  51. try{
  52. serialPort.addEventListener(this);
  53. }catch (TooManyListenersException e){
  54. out_message.setText("监听异常!");
  55. e.printStackTrace();
  56. }
  57. serialPort.notifyOnDataAvailable(true);
  58. }
  59. }
  60. }
  61. readThread = new Thread(this);
  62. readThread.start();
  63. }
  64. public void run(){
  65. try{
  66. Thread.sleep(20);
  67. }catch (InterruptedException e){
  68. e.printStackTrace();
  69. }
  70. }
  71.  
  72. public void serialEvent(SerialPortEvent event){
  73. try{
  74. serialPort.setSerialPortParams(115200,
  75. SerialPort.DATABITS_8,
  76. SerialPort.STOPBITS_1,
  77. SerialPort.PARITY_NONE);
  78. }catch (UnsupportedCommOperationException e){
  79. e.printStackTrace();
  80. }
  81.  
  82. byte[] readBuffer = new byte[200];
  83. try{
  84. inputStream = serialPort.getInputStream();
  85. }catch (IOException e){
  86. e.printStackTrace();
  87. }
  88.  
  89. try{
  90. while (inputStream.available() > 0){
  91. int numBytes = inputStream.read(readBuffer);
  92. }
  93. str = new String(readBuffer);
  94. in_message.append( str + "\n" );
  95. }catch (IOException e){
  96. e.printStackTrace();
  97. }
  98. }
  99. }
  100.  
  101. public class ReadComm {
  102. public static void main( String[] args ){
  103. R_Frame R_win = new R_Frame();
  104. R_win.addWindowListener(new WindowAdapter() {
  105. @Override
  106. public void windowClosing(WindowEvent e) {
  107. System.exit(0);
  108. //super.windowClosing(e);
  109. }
  110. });
  111. R_win.pack();
  112. }
  113. }

Java串口编程学习2-读串口的更多相关文章

  1. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  2. Java并发编程学习前期知识下篇

    Java并发编程学习前期知识下篇 通过上一篇<Java并发编程学习前期知识上篇>我们知道了在Java并发中的可见性是什么?volatile的定义以及JMM的定义.我们先来看看几个大厂真实的 ...

  3. Java并发编程学习路线(转)

    以前特地学过并发编程,但是没怎么学进去,不太喜欢.最近发现,作为一个资深工程师,却没有完整深入系统的学习过,而反是现在的BAT大并发是必须的,感觉甚是惭愧. 故找了一片学习文章,如下,准备集中一段时间 ...

  4. Java并发编程学习路线

    一年前由于工作需要从微软技术栈入坑Java,并陆陆续续做了一个Java后台项目,目前在搞Scala+Java混合的后台开发,一直觉得并发编程是所有后台工程师的基本功,所以也学习了小一年Java的并发工 ...

  5. Java网络编程学习A轮_01_目标与基础复习

    A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟 ...

  6. Java并发编程学习笔记

    Java编程思想,并发编程学习笔记. 一.基本的线程机制 1.定义任务:Runnable接口 线程可以驱动任务,因此需要一种描述任务的方式,这可以由Runnable接口来提供.要想定义任务,只需实现R ...

  7. windows串口编程Win32,PComm串口开发

    https://blog.csdn.net/u011430225/article/details/51496456 https://blog.csdn.net/eit520/article/detai ...

  8. 学习笔记:java并发编程学习之初识Concurrent

    一.初识Concurrent 第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验 ...

  9. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

随机推荐

  1. LeetCode14.最长公共前缀 JavaScript

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  2. 关于改变placeholder的颜色

    input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...

  3. SpringBoot学习15:springboot异常处理方式5(通过实现HandlerExceptionResolver类)

    修改异常处理方式4中的全局异常处理controller package com.bjsxt.exception; import org.springframework.context.annotati ...

  4. MySQL里面的锁

    MySQL里面的锁可以分为:全局锁,表级锁,行级锁. 一.全局锁:对整个数据库实例加锁.MySQL提供加全局读锁的方法:Flush tables with read lock(FTWRL)这个命令可以 ...

  5. 关于alert后,才能继续执行后续代码问题

    如果在正常情况下,代码要在alert之后才执行,解决办法:将要执行的代码用setTimeout延迟执行即可(原因:页面未加载完毕) 首先,先说明问题情况: 如下JS代码,不能正常执行,只有在最前面加上 ...

  6. 小B的询问(莫队)

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  7. jzoj5195. 【NOIP2017提高组模拟7.3】A(递推,打表)

    Description

  8. python 之函数

    一 函数的定义:对功能和动作的封装和定义.二 函数的格式:def 函数名(形参列表): 函数名就是变量名:规则就是变量的规则 函数体(return) ret = 函数名(实参列表)三 函数的返回值:函 ...

  9. sql sever 基础 建表

    ---恢复内容开始--- SQL Sever 基础以创建银行数据库bankDB为案例 1.创建数据库 1-1 创建文件夹用以存放数据库 1-2 创建建库bankDB 2.创建数据库 2-1.创建用户信 ...

  10. Python3 operator模块关联代替Python2 cmp() 函数

    Python2 cmp() 函数 描述 cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1. Python ...