![](/img/trans.png)
[英]NullPointerException when receiving an array list over a socket
[英]Receiving error(IndexOutOfBoundsException) when its higher number of objects in the array list
我知道這是一個常見問題,我已經閱讀了一些帖子,但是還無法弄清錯誤的根本原因。
我有從json文件獲取參數的設備,並且代碼為該設備生成拓撲。 我有一個微微網列表(小型主從組),問題是該代碼在最多45個設備上工作得很好。 當我增加設備數量時,出現以下錯誤;
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)
彈出的位置是;
List<BleMeshDevice> neighboringDevices =this.getTxManager().getNeighbouringDevices(this);
for (BleMeshDevice neighDevice : neighboringDevices) {
if (neighDevice.devMiddleware.getTopologyCtrlBlock().getDevPiconet().get(0).getDevRole()==1)
`getDevPiconet()。get(0)給出了錯誤,這是類代碼,
public BleMeshTopologyCtrlBlock() {
devPiconet = new ArrayList<BleMeshDevicePiconet>(2);
private void AddMastertoSlave(BleMeshDevice linkMaster,
BleMeshDevice linkSlave, int devRole) {
devPiconet.add(new BleMeshDevicePiconet(devRole, linkSlave));
devPiconet.get(devPiconet.size() -1).getDevSlaves().add(linkMaster);
for (BleMeshDevGatewayTable aRow : getDevPiconet().get(0)
.getGatewaytable()) {
if (aRow.getPicRemoteMaster().equals(aNeighPiconetMaster)
&& aRow.getPicLocalGatewayDev().getDevMiddleware()
.getTopologyCtrlBlock().getCapacity() > 0
&& aRow.getPicRemoteGatewayDev().getDevMiddleware()
.getTopologyCtrlBlock().getCapacity() > 0
看起來好像失敗了,因為DevPiconet是空的,但它可用於其他數量的設備...我不明白為什么當設備數量增加時它不起作用。
如果您有任何線索或建議,請告訴我,
提前致謝,
BR
首先,為了防止異常,您應該檢查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)
這樣,您僅檢查有效值。
關於設備編號問題,它與業務邏輯有關,需要更多有關您在做什么的信息才能確定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.