获取indexOutOfBoundsException,我不知道为什么

时间:2016-04-17 09:24:18

标签: arraylist mouselistener

我一直有这个问题几个小时。我不知道它是什么,但我现在很难清楚思考。此方法显示一组图像。该方法的第一部分只是设置gridbag约束,而if语句中的下一部分是创建jlabels并将它们添加到jlabels的arraylist中。当我尝试将jibel添加到arraylist后添加mouselisteners时会抛出异常(这是在第112行,我在代码上对此进行了评论)。

public void displayComplexStimulus(BufferedImage[] complexStimulus){



    for(int i = 0; i < numberOfElements; i++){
        if (i == 0 || i == 1 || i == 2){
            c.gridx = i;
            c.gridy = 0;
        }
        else if(i == 3 || i == 4 || i == 5){
            c.gridx = i - 3;
            c.gridy = 1;
        }
        else {
            c.gridx = i - 6;
            c.gridy = 2;
        }

        if(counter == 1){



                if (phase1Trial.getPositionOfCorrectImage()!= i){
                    phase1IncorrectLabels.add(new JLabel(new ImageIcon(complexStimulus[i])));
                    phase1IncorrectLabels.get(i).addMouseListener(this);  //line 112
                    add(phase1IncorrectLabels.get(i),c);
                }

                else if(phase1Trial.getPositionOfCorrectImage() == i){
                    correctLabel = new JLabel(new ImageIcon(complexStimulus[i]));
                    add(correctLabel, c);
                    correctLabel.addMouseListener(this);

                }
        }

    }





}

1 个答案:

答案 0 :(得分:0)

如果i==phase1Trial.getPositionOfCorrectImage()您没有向phase1IncorrectLabels添加元素。因此,在向阵列添加一个元素后的下一次迭代中,它位于i-1位置,而不是i。您应该将get(i)替换为get(phase1IncorrectLabels.size() - 1)