Exception in thread “main“ java.lang.Error: Structure.getFieldOrder() on class com.gc.checkingHangin

Exception in thread "main" java.lang.Error: Structure.getFieldOrder() on class com.gc.checkingHangingRail.utils.haikang.HCNetSDK$NET_DVR_WORKSTATE_V30 does not provide enough names [0] ([]) to match declared fields [8] ([byAlarmInStatic, byAlarmOutStatic, byAudioChanStatus, byRes, dwDeviceStatic, dwLocalDisplay, struChanStatic, struHardDiskStatic])
	at com.sun.jna.Structure.getFields(Structure.java:1077)
	at com.sun.jna.Structure.deriveLayout(Structure.java:1234)
	at com.sun.jna.Structure.calculateSize(Structure.java:1159)
	at com.sun.jna.Structure.allocateMemory(Structure.java:401)
	at com.sun.jna.Structure.ensureAllocated(Structure.java:377)
	at com.sun.jna.Structure.ensureAllocated(Structure.java:367)
	at com.sun.jna.Structure.write(Structure.java:764)
	at com.sun.jna.Structure.autoWrite(Structure.java:2166)
	at com.sun.jna.Function.convertArgument(Function.java:532)
	at com.sun.jna.Function.invoke(Function.java:345)
	at com.sun.jna.Library$Handler.invoke(Library.java:265)
	at com.sun.proxy.$Proxy0.NET_DVR_GetDVRWorkState_V30(Unknown Source)
	at com.gc.checkingHangingRail.utils.HaiKangSDKSaveRealData.getDVRConfig(HaiKangSDKSaveRealData.java:54)
	at com.gc.checkingHangingRail.utils.HaiKangSDKSaveRealData.main(HaiKangSDKSaveRealData.java:15)

Exception in thread "main" java.lang.Error: Structure.getFieldOrder() on class com.gc.checkingHangingRail.utils.haikang.HCNetSDK$NET_DVR_WORKSTATE_V30 does not provide enough names [0] ([]) to match declared fields [8] ([byAlarmInStatic, byAlarmOutStatic, byAudioChanStatus, byRes, dwDeviceStatic, dwLocalDisplay, struChanStatic, struHardDiskStatic])

出现这个错误!!

解决方法:找到对应位置

分析错误原因:

Structure.getFieldOrder()匹配的有8个而实际只有0个。

所以再开头添加添加

@Structure.FieldOrder(value= {"dwDeviceStatic","struHardDiskStatic","struChanStatic"
		,"byAlarmInStatic","byAlarmOutStatic","dwLocalDisplay"
		,"byAudioChanStatus","byRes"})

修改完如下:

@Structure.FieldOrder(value= {"dwDeviceStatic","struHardDiskStatic","struChanStatic"
		,"byAlarmInStatic","byAlarmOutStatic","dwLocalDisplay"
		,"byAudioChanStatus","byRes"})
public static class NET_DVR_WORKSTATE_V30 extends Structure {//DVR工作状态(9000扩展)
	public int dwDeviceStatic; 	//设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉
	public NET_DVR_DISKSTATE[]  struHardDiskStatic = (NET_DVR_DISKSTATE[])new NET_DVR_DISKSTATE().toArray(MAX_DISKNUM_V30);
	public NET_DVR_CHANNELSTATE_V30[] struChanStatic = (NET_DVR_CHANNELSTATE_V30[])new NET_DVR_CHANNELSTATE_V30().toArray(MAX_CHANNUM_V30);//通道的状态
	public byte[]  byAlarmInStatic = new byte[MAX_ALARMIN_V30]; //报警端口的状态,0-没有报警,1-有报警
	public byte[]  byAlarmOutStatic = new byte[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出
	public int  dwLocalDisplay;//本地显示状态,0-正常,1-不正常
        public  byte [] byAudioChanStatus = new byte[MAX_AUDIO_V30];//表示语音通道的状态 0-未使用,1-使用中, 0xff无效
        public  byte[]  byRes = new byte[10];
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这个错误信息是在Java编程中可能会遇到的一种异常。该异常通常是由于调用反射方法时发生了错误而导致的。简单来说,反射是一种在运行时获取和操作类、方法、属性等信息的机制。 在该错误信息中,"exception in thread "main" java.lang.internalerror: java.lang.reflect.invoca"表明在主线程中发生了一个内部错误,具体原因是调用了反射方法(java.lang.reflect.invoca)时出现了问题。 常见导致该错误的原因可能有以下几种: 1. 调用的方法不存在或名称有误:在使用反射调用方法时,方法的名称需要与目标方法名称完全匹配,否则会出现此错误。 2. 方法的参数类型不匹配:使用反射调用方法时,需要确保传递的参数类型与方法定义的参数类型相匹配,否则会导致此错误。 3. 访问权限不足:某些反射方法需要使用类或方法的访问权限,如果没有相应的权限,将无法调用该方法并导致错误。 4. 其他异常情况:这个错误信息只是一个概括性信息,具体原因可能是其他异常,需要查看详细错误信息或调试程序才能确定具体原因。 解决此错误的方法可以根据具体情况进行调整和尝试,可以通过检查传递的参数、确认方法的存在和访问权限以及查看详细的错误信息等方式来解决。如果仍然无法解决,建议查阅Java官方文档或向其他开发者寻求帮助以获取更详细的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值