串口通信-Java使用rxtx进行多串口开发问题

问题描述

Java使用rxtx进行多串口开发问题

# 我的项目第一版中使用RXTX库进行串口操作(同一时间只涉及单个串口在工作),都没出现过问题。

# 现在项目需要,接入多个串口同时工作,出现了JVM Crash的问题。

现象描述

程序使用rxtx.jar进行串口通信开发,同时进程多个串口双向通信,

假设使用到的串口名称为COM1和COM2

情况1

com1开启,com2开启-->OK

com1关闭-->OK

com1第二次开启----->奔溃,提示见附1

情况2

com1开启,com2开启-->OK

com2关闭-->OK

com2第二次开启--->ok

情况3

com1开启,com2开启-->OK

com2关闭-->OK

com1第二次开启----->提示串口被占用,正常

情况4

com1开启,com2开启-->OK

com1关闭-->OK

com2关闭-->OK

com1第二次开启----->OK

个人总结下情况

使用多个串口,如果有串口要进行第二次开启,且这个串口在机器上扫描出来是第一个串口的话,需先将所有串口都关闭后再执行串口开启,否则就会出现错误。

附1:以下运行出错时提示的内容,具体日志在hs_err_pid9032.log中

 # A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000001800071cd, pid=9032, tid=5016
#
# JRE version: Java(TM) SE Runtime Environment (7.0_51-b13) (build 1.7.0_51-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [rxtxSerial.dll+0x71cd]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:UsersJackworkspaceTestProjecths_err_pid9032.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

附2:简单测试代码

 public static void main(String[] args) throws Exception {
    CommPortIdentifier com13PI = CommPortIdentifier
            .getPortIdentifier("COM13");
    CommPortIdentifier com1PI = CommPortIdentifier
            .getPortIdentifier("COM1");
    SerialPort com13 = (SerialPort) com13PI.open(main.class.getName(), 400);
    SerialPort com1 = (SerialPort) com1PI.open(main.class.getName(), 400);
    com13.close();
    //com1.close();
    com13PI = CommPortIdentifier.getPortIdentifier("COM13");
    com13 = (SerialPort) com13PI.open(main.class.getName(), 400);
 }

现在的做法是每次有串口需要变动时,都先关闭所有串口,再开启需要用到的多个目标串口,但这样灵活性不高,有谁知道如果解决该问题的,望指点下,谢谢!

解决方案

java 使用rxtx 进行串口交流。
C++Builder中使用MSCOMM进行串口编程

解决方案二:

直接用JVM调C库,是比较容易出现JVM崩溃的问题;为了节约时间成本,最好不要这么做;
可以用ICE来实现Java和C++的相互调用,比较安全

时间: 2022-12-25

串口通信-Java使用rxtx进行多串口开发问题的相关文章

串口通信-Java通过得到的Socket流向串口发送数据

问题描述 Java通过得到的Socket流向串口发送数据 我是一个菜鸟,最近学习Java ,写了个向串口发送数据的代码,有点问题,希望各位大神给指点指点 package server; import gnu.io.CommPortIdentifier; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventLis

cpu-求大神,linux串口通信方面!!!7445CPU串口和CC2530通信验证

问题描述 求大神,linux串口通信方面!!!7445CPU串口和CC2530通信验证 我现在有一块7444的开发板,想实现7444通过串口传输命令给7444开发板上的另一模块cc2530(zigbee中的协调器),然后发送给给第三方开发板(只要当前cc2530能接收到命令就能直接发送数据到zigbee终端,以实现),然后终端zigbee模块的温度数据回传到7444开发板上的CC2530协调器,再从串扣回传给7445,已知我当前的串口设备文件是tty1,怎么编写C程序读取改开发板上cc2530传

串口通信java程序问题

问题描述 从网上下载了那个串口通信的安装包之后,根据上面的步骤修改好了环境变量后想要运行包裹中的SimpleRead程序,但是每次运行都是出现staticerror:SimpleReadclassundefined.求大神指导!!!!急求解决方案!!! 解决方案 解决方案二:类未定义-缺少这个类的class文件吧--解决方案三:importjava.io.*;importjava.util.*;importjavax.comm.*;publicclassSimpleReadimplementsR

串口通信-java控制收银机“客显”实时显示单价总额等所对应的数字

问题描述 java控制收银机"客显"实时显示单价总额等所对应的数字 小弟是新手,刚进公司,接手一个用java写的超市收银系统小项目,其他问题都解决了,就差这个客显了,很恼火啊! 目前我试过三种方法:1.用dos命令行,输入esc pos命令,或许是我不会用这个命令,数字倒是显示出来了,但是格式不对,小数也不能显示,更别说显示找零单价总额这些字样了:2.用java的串口通信技术,我电脑是笔记本,所以只能用vspd建几个虚拟串口,串口是建好了,但是从网上大牛摘取的代码却检测不到这几个串口,

Java串口通信读取浮点型数据

问题描述 Java串口通信读取浮点型数据 怎么将如下位机中的数据:如温度读取并显示,大神们有具体的例子吗 解决方案 这个要取决于你下位机是用的什么方式通讯的,它的通信协议.基本的思路是读取串口数据,然后根据协议对得到缓冲区的字节数组进行解析. 参考:http://blog.csdn.net/wssiqi/article/details/14107341 解决方案二: java 串口通信Java串口通信简介

使用Java实现串口通信_java

1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码下载地址:http://download.csdn.net/detail/kong_gu_you_lan/9611343 效果图如下: 2.RXTXcomm Java串口通信依赖的jar包RXTXcomm.jar 下载地址:http://download.csdn.net/detail/kong_gu_you_lan/9611334 内含32位与64位版本 使用方法: 拷贝 RXTXcomm.jar 到 JAVA_HO

Android 串口通信编程及串口协议分析_Android

Android 串口通信编程:嵌入式编程和可穿戴设备及智能设备都会用到串口,这里就带大家分析下, 一,android串口通信 串口通信采用一个第三方开源项目,实现串口数据收发. 1. 使用了http://code.google.com/p/android-serialport-api/的项目的serialport api和jni: 2. 支持4串口同时收发,有定时自动发送功能,收发模式可选Txt或Hex模式: 3.  n,8,1,没得选: 4. 为减轻界面卡顿的情况,接收区的刷新采用单独的线程进

linux编程-linux串口通信问题,急急急!!!

问题描述 linux串口通信问题,急急急!!! 我在开发板上qt程序,开发板跟PC机的虚拟机通过USB转串口线连接,上面运行的是Ubuntu12.04系统,我在PC上发送字符串,然后在开发板上接收,接收的数据单个单个字符接收,为什么不是一整个字符串接收呢?并且接收不到第一个字符,而且差不多接收10秒之后就不在接收数据了!!!!.请各位大神赐教!!! int fd,num,rtn; struct termios options; fd = open("/dev/ttyUSB0", O_R

c#-C#串口通信问题,串口助手调试和真机测试不一样

问题描述 C#串口通信问题,串口助手调试和真机测试不一样 我用的两台电脑装串口助手来测试发送信息,发送的是16进制信息.通过串口调试助手测试发送的信息是没有问题的.然后链接机器发送信息,机器没反映,用串口助手发送信息机器能正常运行,大神能指出哪里可能出问题? 解决方案 C# 串口通信调试助手1编程练习:串口通信调试助手 解决方案二: 串口助手发送能正常,那就建议看看你的串口初始化吧.