Java 从JPanel中删除组件时出现堆栈溢出错误
我有一个JPanel,它包含具有不同GUI组件的其他面板,包括带有操作侦听器的按钮。在某个时候,我想删除一些组件并添加新组件。因此,我尝试删除主JPanel上的所有组件,然后添加新组件。当我运行Java 从JPanel中删除组件时出现堆栈溢出错误,java,swing,stack-overflow,Java,Swing,Stack Overflow,我有一个JPanel,它包含具有不同GUI组件的其他面板,包括带有操作侦听器的按钮。在某个时候,我想删除一些组件并添加新组件。因此,我尝试删除主JPanel上的所有组件,然后添加新组件。当我运行removeAll()方法时,我得到一个堆栈溢出错误。我也试着一次移除一个组件,但我仍然遇到这个问题。还尝试了in/re/validate的不同组合,但未删除旧组件。以下是我上一次尝试的内容: public void updateSuites() { removeAll(); //for
removeAll()
方法时,我得到一个堆栈溢出错误。我也试着一次移除一个组件,但我仍然遇到这个问题。还尝试了in/re/validate的不同组合,但未删除旧组件。以下是我上一次尝试的内容:
public void updateSuites() {
removeAll();
//for(int i = 0; i < getComponentCount(); i++)
//remove(getComponent(i));
invalidate();
showGui();
revalidate();
repaint();
}
编辑2:
我做了一点调试,发现了以下几点:我有一个JPanel数组添加到当前面板上。因此,删除数组JPanel的子级不是问题,但当我尝试删除数组JPanel时,问题就出现了。代码如下所示:
for(int i = 0; i < panels.length; i++) {
panels[i] = new JPanel();
// add components to panels[i]
add(panels[i]);
}
for(int i=0;i
所以如果我跑
for(int i = 0; i < panels.length; i++) {
remove(panels[i]);
}
for(int i=0;i
我收到堆栈溢出错误。我将尝试以下方法:
for (int i = getComponentCount() - 1; i >= 0; i--) {
remove(getComponent(i));
}
每次删除后,您都会调用
getComponentCount
,这会将计数减少1。只需检查堆栈跟踪即可。你会看到你做了什么样的循环。我们不能用当前信息解决这个问题你的递归在哪里?您可能没有意识到,但它就在代码中的某个地方。另外,使用CardLayout交换视图会更好吗?嗯,对该方法的调用来自同一面板上的按钮。这可能是原因吗?@RegedUser00x从你提供的非常非常微小的信息来看,任何人都不可能回答你的问题。Stackoverflow是一个或多个方法之间无限递归的结果。或者发布一篇文章,或者你会被困在自己身上去发现问题。好的,我更新了问题的描述。
for(int i = 0; i < panels.length; i++) {
remove(panels[i]);
}
for (int i = getComponentCount() - 1; i >= 0; i--) {
remove(getComponent(i));
}