java - JavaFX 的 OutOfBoundsException

标签 java javafx indexoutofboundsexception

我的代码有问题。我正在编写一个必须管理每周深蹲训练的程序。可以记录之前的训练或安排一整周的训练。在第二种情况下,用户必须输入每天的深蹲次数和他认为的难度。我用一个有 3 种声音(简单、中等、困难)的选择框来管理每天的难度,当我读取所选值时,我将其保存为 int 以便轻松地将其用于程序中的其他操作(简单 = 1、中=2、硬=3)。

现在,我的问题是我有 7 个 choiceBox,每天一个,而我只需要一种方法来处理它们。每次用户从这些 choiceBox 之一中选择一个值时,它应该调用扫描所有 7 个 choiceBox 的值并更新相对 int 值的方法。我采用这种解决方案是因为我只使用 7 个 choiceBox 的一种方法,并且我不知道哪个方法调用该方法。为此,我创建了一个 choiceBox vector ,并使用了从 0 到 < .length 的 for cicle,但每次我在任何 choiceBox 中选择一个语音时,cicle 都会超出范围。我还创建了一个相对的 int 数组来解决不同的困难。

这里是异常和我的方法:

线程“JavaFX 应用程序线程”java.lang.ArrayIndexOutOfBoundsException 中出现异常:7

public void weekDifficulties() {

    for (j = 0; j < arrayCB.length; j++) {

        arrayCB[j].getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue ov, Number oldValue, Number newValue) {

                if ((Integer) newValue >= 0 && (arrayCB[j].getItems().get((Integer) newValue).equals("Easy")))
                    arrayDifficulties[j] = "1";
                else if ((Integer) newValue >= 0 && (arrayCB[j].getItems().get((Integer) newValue).equals("Medium")))
                    arrayDifficulties[j] = "2";
                else if ((Integer) newValue >= 0 && (arrayCB[j].getItems().get((Integer) newValue).equals("Hard")))
                    arrayDifficulties[j] = "3";
            }
        });
    }
}

感谢您的帮助

最佳答案

j似乎是一个领域。在这种情况下,当触发监听器时,它包含最后分配给它的值,即 arrayCB.length =arrayCB.length (=第一个 int ,其中 j < arrayCB.length 产生 false )。这当然会导致ArrayIndexOutOfBoundsException .

因为您显然需要访问 j 的值执行循环体时的字段,您需要将其复制到变量:

for (j = 0; j < arrayCB.length; j++) {
     final int index = j;

    arrayCB[j].getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue ov, Number oldValue, Number newValue) {

            if ((Integer) newValue >= 0 && (arrayCB[index].getItems().get((Integer) newValue).equals("Easy")))
                arrayDifficulties[index] = "1";
            ...
        }
    });
}

此外j可能不应该首先声明为字段

关于java - JavaFX 的 OutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37776454/

相关文章:

java - 在 Java 中将多行字符串强制转换为 List<String>

css - JavaFx 如何在 CSS 中使用 java 生成的 RGB 颜色

c# - 索引超出数组范围 - For 循环

java - 尝试访问数组后出现 ArrayIndexOutOfBoundsException

Java日历: I want to remove specific Day of week from calendar

java - 使用不同的参数从同一个 asynctask 类获取不同的值 android

JavaFX Controller 未在根元素中定义

java - 为什么我收到 "ArrayIndexOutOfBoundsException"错误?

java - 如何使用在不同机器上运行的多个java程序访问同一个表而不会出现死锁

java - 构造函数需要一个无法找到的 bean 类型