我正在尝试从Java容器中删除除第一个子组件之外的所有组件。以下代码记录“有3”,并引发ArrayIndexOutOfBoundsException:数组索引超出范围:2
int componentCount = cardPanel.getComponentCount();
logger.info("There are " + componentCount);
for (int i = 1; i < componentCount; i++) {
cardPanel.remove(i);
}
但是,此修改后的版本可以完美运行:
Component[] components = cardPanel.getComponents();
logger.info("There are " + components.length);
for (int i = 1; i < components.length; i++) {
cardPanel.remove(components[i]);
}
看来Container.getComponentCount()和Container.remove(int i)不能就容器中的组件数量达成共识。还有其他人遇到这个问题吗?
最佳答案
当您执行cardPanel.remove(i)时,组件的数量正在减少。
因此,您有[0,1,2],然后从索引1处删除项目。
现在您有了[0,2]并删除了索引2处的项目,这将引发ArrayIndexOutOfBoundsException。
修改后的版本之所以有效,是因为它是从容器中删除实际对象,而不是从索引中删除。
试试这个
int componentCount = cardPanel.getComponentCount();
logger.info("There are " + componentCount);
for (int i = 1; i < componentCount; i++) {
cardPanel.remove(1);
}