我在这里有这个代码(使用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
keys.remove(KEY_ESCAPE);
。
任何人都有分享的见解吗?
答案 0 :(得分:6)
KEY_ESCAPE的价值是多少?
它可能是值为1的int,因此不是删除具有该值的对象,而是删除位置1处的对象,该对象显然不存在。
答案 1 :(得分:3)
ArrayList.remove为您要删除元素的索引采用int参数。在您的情况下,KEY_ESCAPE也恰好是一个整数。
简而言之,您尝试将转义键的Integer值删除为ArrayList的索引!