我一直有这个问题几个小时。我不知道它是什么,但我现在很难清楚思考。此方法显示一组图像。该方法的第一部分只是设置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);
}
}
}
}
答案 0 :(得分:0)
如果i==phase1Trial.getPositionOfCorrectImage()
您没有向phase1IncorrectLabels
添加元素。因此,在向阵列添加一个元素后的下一次迭代中,它位于i-1
位置,而不是i
。您应该将get(i)
替换为get(phase1IncorrectLabels.size() - 1)
。