Java 从JPanel中删除组件时出现堆栈溢出错误

Java 从JPanel中删除组件时出现堆栈溢出错误,java,swing,stack-overflow,Java,Swing,Stack Overflow,我有一个JPanel,它包含具有不同GUI组件的其他面板,包括带有操作侦听器的按钮。在某个时候,我想删除一些组件并添加新组件。因此,我尝试删除主JPanel上的所有组件,然后添加新组件。当我运行removeAll()方法时,我得到一个堆栈溢出错误。我也试着一次移除一个组件,但我仍然遇到这个问题。还尝试了in/re/validate的不同组合,但未删除旧组件。以下是我上一次尝试的内容: public void updateSuites() { removeAll(); //for

我有一个JPanel,它包含具有不同GUI组件的其他面板,包括带有操作侦听器的按钮。在某个时候,我想删除一些组件并添加新组件。因此,我尝试删除主JPanel上的所有组件,然后添加新组件。当我运行
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));
}