我有一个IndexOutOfBoundsException
,但我不知道为什么。
我有几个文本字段(Integer,Double和其他),我需要根据ArrayList<String> tagContentAL
上的信息使用它们
这是我的代码:
jLabelAL = new ArrayList<>();
jTextFieldAL = new ArrayList<>();
for (int i = 0; i < size; i++) {
jLabelAL.add(new JLabel("" + tagNamesAL.get(i)));
switch (tagContentAL.get(i).toString()) {
case "int":
jTextFieldAL.add((JTextField) new tools.IntegerTextField(simulation));
break;
case "double":
case "float":
jTextFieldAL.add((JTextField) new tools.DoubleTextField(simulation));
break;
case "*":
jTextFieldAL.add((JTextField) new JTextField());
break;
}
jTextFieldAL.get(i).addKeyListener(keyEvent); //IndexOutOfBoundsException in this line
p1.add(jLabelAL.get(i));
p1.add(jTextFieldAL.get(i));
}
似乎是什么问题?
最佳答案
您不必在每次迭代中都向jTextFieldAL
添加元素,因为开关没有默认大小写。如果在直到当前迭代(包括当前迭代)的每次迭代中都没有向jTextFieldAL
添加元素,那么您在执行jTextFieldAL.get(i)
时将越界读取,因为添加的最后一个元素(如果有)将具有严格小于i
的索引。实际上,这意味着您将在第一次迭代中得到一个IndexOutOfBoundsException
,在该迭代中您无法向jTextFieldAL
添加元素。