簡體   English   中英

當數組列表中對象的數量更多時,接收到錯誤(IndexOutOfBoundsException)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM