对接海康摄像头,在打成jar运行时出现:
Exception in thread "threadPoolTaskExecutor-1" java.lang.Error: Structure.getFieldOrder() on class com.ruoyi.web.equipment.hk.HCNetSDK$NET_DVR_USER_LOGIN_INFO does not provide enough names [0] ([]) to match declared fields [15] ([bUseAsynLogin, byHttps, byLoginMode, byProxyType, byRes2, byUseTransport, byUseUTCTime, byVerifyMode, cbLoginResult, iProxyID, pUser, sDeviceAddress, sPassword, sUserName, wPort])
这个问题是因为海康jna.jar比较老,结构体定义没有getFiledOrder,可创建一个类继承 Structure
import com.sun.jna.Structure;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
/**
* @author: tw
* @date: 2022/1/12 10:57
*/
public class HIKSDKStructure extends Structure {
protected List<String> getFieldOrder(){
List<String> fieldOrderList = new ArrayList<String>();
for (Class<?> cls = getClass();
!cls.equals(HIKSDKStructure.class);
cls = cls.getSuperclass()) {
Field[] fields = cls.getDeclaredFields();
int modifiers;
for (Field field : fields) {
modifiers = field.getModifiers();
if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
continue;
}
fieldOrderList.add(field.getName());
}
}
return fieldOrderList;
}
}
然后 HCNetSDK 类里所有继承 Structure 替换为 HIKSDKStructure 即可