rxtx是java串口通信中所使用的jar包,目前我正在完成一个上位机的任务,通过串口发送指令,读取数据,实时显示硬件返回的数据。
通过考察选定rxtx作为我所使用的串口通信框架,根据其他博客得知其使用说明,如下图:
我按照步骤做了一下,读取串口名称操作没有问题,但写入串口操作导致虚拟机报错,报错信息如下:
```
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180004465, pid=19324, tid=6140
#
# JRE version: Java(TM) SE Runtime Environment (10.0.1+13) (build 10.0.1+13-LTS)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (10.0.1+13-LTS, mixed mode, tiered, compressed oops, g1 gc, windows-amd64)
# Problematic frame:
# C [rxtxSerial.dll+0x4465]
#
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
```
满世界找bug后得到如下结果:
1.jar包版本和dll不匹配
2.切换工作空间
3.将jar包放入jre/lib下的ext文件夹
1和2试了都不行,期间还获知dll放在jre的bin目录下即可,但没有解决我的问题,在使用3方法的时候,由于我使用的jdk版本是10.0.1,该版本下没有ext文件夹,最终尝试使用降低版本的方法得到这个文件夹在试试,笔者安装JDK1.8后,jar包放入ext文件夹。如下图:
修改eclipse运行环境(window->preferences->java->installed jre)点击add,增加jdk1.8的目录并选中,点击apply,如下图:
如果你是新建java工程,到这里就行了,新建工程默认使用新环境。但更改环境前的java工程,使用的还是jdk10.0.1,如果是这种情况,则需要修改该工程的运行环境,右键工程,选中buildpath,进入弹窗,选中jdk10,点击remove移除。
在点击Add Library,在弹窗中选择jre system library,选择jdk1.8即可
经过一番缠斗,终于把rxtx的bug解决了,说实话这jar居然要放到虚拟机里执行还是第一次见,有点东西。成果如图:
rxtx详细操作代码在下一篇博客里再介绍,就这样。