我知道这是一个常见的问题,我已经阅读了一些帖子,但还是找不到错误的根本原因。
我有从json文件获取参数的设备,代码为这些设备生成拓扑。 我有一个微微网(小主从组)的列表,问题是代码工作得很好,最多45个设备。当我增加设备数量时,我得到以下错误;
loadmat
弹出的位置;
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at KTHBleMesh.BleMeshDevice.construct(BleMeshDevice.java:508)
at KTHBleMesh.BleMeshDevice$2.run(BleMeshDevice.java:468)
at KTHBleMesh.Event.run(l2.java:21)
at KTHBleMesh.Simulator.doAllEvents(l2.java:50)
at KTHBleMesh.IteratorEngine.main(IteratorEngine.java:85)
` getDevPiconet()。get(0)给出错误,这里是类代码,
List<BleMeshDevice> neighboringDevices =this.getTxManager().getNeighbouringDevices(this);
for (BleMeshDevice neighDevice : neighboringDevices) {
if (neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().get(0).getDevRole()==1)
看起来它失败了,因为DevPiconet是空的,但它适用于其他数量的设备...我不明白为什么它在设备数量增加时无效。
如果您有任何线索或建议,请告诉我,
提前致谢,
BR
答案 0 :(得分:0)
首先,为了防止异常,你应该检查你的Piconet的空指针和数组大小,而不是检查第一个项目dev角色的值:
if (neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().get(0).getDevRole()==1)
首先检查数组是否为空,并且他的大小超过0:
if (neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet() != null && neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().size() > 0 && neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().get(0).getDevRole()==1)
这样你只检查有效值。
关于设备编号问题,它与业务逻辑有关,需要更多关于您正在做什么的信息来确定