java串口jdk1.8以后版本win10 64位系统bug修复库nrjavaserial-3.15.0

分享

如果使用java+RXTX进行串口开发的时候出现如下类似 [rxtxSerial.dll+0x4465] 的报错是可以替换下面的jar包可以解决这个问题,java源代码里面引用的类不需要更改,经本人测试环境是win10+jdk11通过,作者是JDK14+WIN10

RXTX在win系统下仅适合JDK1.8(含)以下版本正常使用。linux系统下RXTX+jdk1.8以上版本暂时没返现有这类型报错报错都是你自身使用不当造成,当然不想麻烦直接替换下面的nrjavaserial-3a包也可以(本人还没linux系统测试过你们可以自身测试后再生产)。另外我只测试一个串口的情况下,多串口还为测试过自行测试,都是免费产品不做过多研究。


单口4G短信设备

单口4G短信设备


这是另一个文章低于这类型错误的一种说法,没有验证本人知识有限有能力及时间爱好的朋友可以自行深究。

问题原因(网上说法不一):

第一种:可能因为你现在阻塞导致jvm崩掉

第二种:win10的重叠操作


(引用)RXTX在Win10上不能使用,一调用write就报错。RXTX已经超过10年没有更新了。我觉得是Win10的锅,因为Win10的重叠操作会报错,用C调用API打开串口,用了重叠操作就各种不正常,随机出错,只能用同步方式打开。RXTX可能是基于重叠操作的,所以在Win10就不行了。

如何重新建立一个串口读写的接口。

首先,用同步方式打开串口,不要用异步操作,那会带来随机问题。

然后,超时参数除最短的那个是-1,其它都设置成0。这样可以像InputStream那样进行非阻塞操作。顺带一提,这几个参数有关联关系,设得不好可能会卡在那里不动,所以干脆设成非阻塞无延时最简单了。

流控默认是关的,不可能会有用流控的设备,所以不需要管它。只需要开放输入缓冲、输出缓冲、波特率、字节长度、校验、停止位就行了。

在java创建一个后台线程读串口,然后用一个阻塞队列做应用层的缓冲区。

有了缓冲区,就可以做数据拼接。数据拼接有三个要素:1、超时,可以用阻塞队列的poll方法;2、最大长度,在后台线程进行最大长度检查;3、校验条件,校验条件是一个Lambda对象,每次接收到数据包后调用这个Lambda判断是否达到校验要求,如果达到要求,则直接退出,不再等待超时,也不等待数据达到数量上限



下面是本文重点的作者原文

这是RXTX项目的一个分支,库文件和dll都打包到一个文件里了

直接上库链接nrjavaserial-3a.zip

工程中导入库

我用的jdk14+win10 64位系统

我的测试代码

import gnu.io.NRSerialPort;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
 
public class Test {
 
 
    public static void main(String[] args) {
        for(String s:NRSerialPort.getAvailableSerialPorts()){
            System.out.println("Availible port: "+s);
        }
        String port = "COM1";
        int baudRate = 9600;
        NRSerialPort serial = new NRSerialPort(port, baudRate);
        serial.connect();
 
        DataInputStream ins = new DataInputStream(serial.getInputStream());
        DataOutputStream outs = new DataOutputStream(serial.getOutputStream());
 
        byte b = 0;
        while (true) {
            try {
                b = (byte) ins.read();
 
//                System.out.println(b);
                if(b!=-1)outs.write(b);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 
//        serial.disconnect();
    }
}

原文地址:https://blog.csdn.net/qilanjie1/article/details/104995493/

短信设备二次开发 2022-11-25 0 0

admin

  • 注册时间 : 2022-03-30 04:08:47
  • 邮箱地址 : admin@tenghengkeji.com
  • 此页面用于展示用户的基本上资料信息

回帖 ( 0 )