我这里有这段代码(使用 lwjgl 但应该没有实际意义)来尝试在按 esc 键时暂停游戏。我使用带有按键的 ArrayList 来跟踪按下的内容和未按下的内容。
public List<Integer> keys = new ArrayList<Integer>();
public void get() {
if (isKeyDown(KEY_ESCAPE) && !keys.contains(KEY_ESCAPE)) {
keys.add(KEY_ESCAPE);
keyEscape();
}
}
public void rem() {
if (!isKeyDown(KEY_ESCAPE) && keys.contains(KEY_ESCAPE))
keys.remove(KEY_ESCAPE);
}
private void keyEscape() {
Screen.paused ^= true;
}
这是由循环调用的,它在循环中按顺序依次执行 get()
和 rem()
。当我松开 ESC 时,这给了我一个很棒的 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at keys.remove(KEY_ESCAPE);
。
有人有什么见解可以分享吗?
最佳答案
KEY_ESCAPE 的值是多少?
它可能是值为 1 的 int,因此您无需删除具有该值的对象,而是删除位置 1 处的对象,而该对象显然不存在。
关于java - 删除 ArrayList 元素时出现 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549021/