删除树的节点时出现stack-Overflow错误

时间:2012-01-10 11:18:14

标签: 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();

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

请让我知道我哪里出错了。

1 个答案:

答案 0 :(得分:1)

错误是因为您要从for循环中的列表中删除项目,即

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

很可能是错误的来源。

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

尝试评论上面已经指出的代码部分,你不应该得到溢出错误(这将是你第一次检查零代码导致问题的部分)

下一步是尝试像

这样的事情
temp.keyList.clear()
temp.valueList.clear()

而不是上面的for循环。