java - 删除树的节点时出现堆栈溢出错误

标签 java swt treeviewer

我有一个这种格式的树结构:

Index1
|
 --Key1
 --Value1 
Index2
|
 --Key2
 --Value2

KeyValue 对象是 Index 对象的子对象,树中没有索引对象。

我正在维护 Index 对象 (indexList)、Key 对象 (keyList) 和Value 对象 (valueList)。

viewerTreeViewer 的对象。

我的目标是删除 Index 对象,负责此操作的代码是:

String indexName = text.getText();

for(int i =0; i< model.indexList.size(); i++)
{                   
    if(model.indexList.get(i).getName().equals(indexName))
    {
        Index temp = model.indexList.get(i);
        int noOfKeys   =  temp.keyList.size();
        int noOfValues =  temp.valueList.size();

        for(int j=0; j<noOfKeys ; j++ )
        {
            temp.keyList.remove(j);
            temp.valueList.remove(j);
        } 

        model.indexList.remove(i);
        break;
    }
}
viewer.refresh();

当我执行删除操作时,节点被删除,但出现堆栈溢出错误。

请告诉我我哪里出错了。

最佳答案

该错误是因为您正在 for 循环中从列表中删除项目,即

for(int j=0; j<noOfKeys ; j++ )
                    {
                        temp.keyList.remove(j);
                        temp.valueList.remove(j);
                    } 

很可能是错误的根源。

每次从列表中删除某些内容时,所有项目的相对索引值都会发生变化。 例如 temp.keylist.remove(0) 将删除第零个项目,索引 1 处的项目将移动到索引零。现在,对于下一次迭代,j 已经增加到 1(但它应该为零)

尝试注释上面我指出的代码部分,您不应该收到溢出错误(这将是您第一次检查导致问题的代码部分为零)

下一步是尝试类似的事情

temp.keyList.clear()
temp.valueList.clear()

而不是上面的 for 循环。

关于java - 删除树的节点时出现堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8802413/

相关文章:

java - 无法访问在 cli 中创建的 cql 中的键空间

java - 调整相机拍摄的照片大小以适合屏幕

java - 是否有用于 SWT 的预制放大镜光标?

java - 如何在组合框中添加链接?

java - SWT DragSourceEvent 图像未正确锚定到鼠标指针

java - JFace - 如何根据同一行中另一列的复选框值在 TreeViewer 中仅可编辑一列?

java - 调整大小时重新绘制框架?

java - 无法使用 swt Transform 旋转透明图像

java - 如何在 JFace TreeViewer 中禁用可折叠

java - XPath、XML 命名空间和 Java