SprinBoot3 oshi、purejavacomm的jna库版本冲突。The type "jtermios.windows.WinAPI$ULONG_PTR" is not supported。

报错

com.intelligt.modbus.jlibmodbus.serial.SerialPortException: java.lang.IllegalArgumentException: Invalid Structure field in class jtermios.windows.WinAPI\(OVERLAPPED, field name 'Internal' (class jtermios.windows.WinAPI\)ULONG_PTR): The type "jtermios.windows.WinAPI\(ULONG_PTR" is not supported: Can't create an instance of class jtermios.windows.WinAPI\)ULONG_PTR, requires a public no-arg constructor: java.lang.reflect.InvocationTargetException

问题描述

SpringBoot3中串口purejavacomm与oshi(用于读取系统信息 cpu men disk等等)冲突。
使用串口把oshi注释掉,串口是没问题了。使用oshi把串口部分注释掉,oshi也是可以正常运行。但是放一起就报错。

原因

oshi、purejavacomm的jna库版本冲突,purejavacomm使用的是4.2.2,而oshi使用的是5.5.0

解决方法

  1. 更换串口构造工厂,代替库:jssc (https://github.com/java-native/jssc)
  2. 排除冲突 参考: https://blog.csdn.net/u010786653/article/details/119759060

pom.xml

<dependency>
	<groupId>io.github.java-native</groupId>
	<artifactId>jssc</artifactId>
	<version>2.9.6</version>
</dependency>

业务代码:

//...
// 替换为jssc
//SerialUtils.setSerialPortFactory(new SerialPortFactoryPJC());
SerialUtils.setSerialPortFactory(new SerialPortFactoryJSSC());
//...
posted @ 2024-07-11 16:21  xXinG9199  阅读(48)  评论(0编辑  收藏  举报