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
解决方法
- 更换串口构造工厂,代替库:jssc (https://github.com/java-native/jssc)
- 排除冲突 参考: 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());
//...