线程" main"中的例外情况java.lang.IndexOutOfBoundsException:索引:5,大小:0

时间:2015-10-01 13:00:18

标签: java

我刚才有这个错误。我有这个

private List<String> neighbourNames;

其中包含网络中对等方的名称。当对等方尝试离开网络时,尝试在其他对等方的列表中删除自己。发生了这种情况,但最终我收到了一个错误。这是代码

for(String s : neighbourNames){
            try {
                stub = (PeerInterface) registry.lookup(s);
            } catch (NotBoundException e) {
                System.out.println("Cannot reach " + s + ", probably is offline");
            }
            stub.removeMeFromNetwork(nome,key);

        }

错误是标题中显示的错误......

at com.sun.proxy.$Proxy0.removeMeFromNetwork(Unknown Source)
    at com.server.PeerNode.leaveNetwork(PeerNode.java:181)
    at com.server.PeerNode.printMenu(PeerNode.java:475)
    at com.server.PeerNode.run(PeerNode.java:118)
    at com.server.Main.main(Main.java:85)

抛出该错误的行是:stub.removeMeFromNetwork(nome,key);

这是removeMeFromNetwork的实现:

public void removeMeFromNetwork(String nome, int ke) throws RemoteException {
        System.out.println(nome + " is leaving the network");

        neighbourNames.remove(nome);
        listKey.remove(ke);
        System.out.println("QUALCUNO E' USCITO VICINI RIMANENTI\n"+ neighbourNames);

    }

提前致谢

1 个答案:

答案 0 :(得分:0)

接口List有两个remove方法,一个接受对象(List.remove(Object)),另一个接受索引号(List.remove(int))。当你有一个List<Integer>时,你必须小心地调用正确的。{/ p>

即,在您的代码中,您有一个参数int ke并调用listKey.remove(ke);,它将调用List.remove(int)并将ke解释为索引而不是元素。您可以通过插入类型广告Integer

来删除listKey.remove((Integer)ke);对象