我的代码有问题。我正在编写一个程序,必须管理每周的深蹲训练。可以记录以前的培训或安排一整周的时间。在第二种情况下,用户每天必须输入下蹲次数和他认为会遇到的困难。我用一个具有3种声音(简单,中等,困难)的选择框来管理每天的困难,当我读取所选的值时,我将其保存为int值,以便轻松地将其用于程序中的其他内容(easy = 1,中= 2,硬= 3)。
现在,我的问题是我每天有7个ChoiceBox,而我只需要一种方法即可处理它们。每次用户从这些choiceBox之一中选择一个值时,它都应调用扫描所有7 choiceBox的值并更新相对int值的方法。我采用此解决方案是因为我仅对7 choiceBox使用一种方法,但我不知道哪个调用该方法。为此,我创建了一个choiceBox的向量,并使用了一个从0到
这里是异常和我的方法:
线程“ 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/