我有一个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添加元素。

10-08 00:18