2012-01-10 80 views
0

的節點我在這個格式的樹形結構:堆棧溢出錯誤而刪除樹

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

KeyValue對象是Index對象的孩子,有樹無索引對象。

我維護數組列表爲Index對象(indexList),Key對象(keyList)和Value對象(valueList)。

viewerTreeViewer的一個對象。

我的目標是消除索引對象以及負責這次行動的代號爲:

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(); 

當我執行刪除操作的節點被刪除,但與堆棧溢出錯誤。

請讓我知道我錯了什麼地方。

回答

1

這個錯誤是因爲您在去除列表中的項目爲循環即

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

最可能是錯誤的來源。

每次從列表中刪除某些東西時,所有項目的相對索引值都會改變。 例如,temp.keylist.remove(0)將刪除第零項,並且索引1處的項目將移動到索引零。現在下一次迭代j已經增加到1(但它應該已經爲0)

嘗試評論上面的代碼段,我已經指出,你不應該得到溢出錯誤(這將你的第一個檢查爲零在這部分代碼導致該問題)

下一步將嘗試像

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

,而不是上面循環的東西。

+0

我同意你對此的看法,並且我相應地修改了代碼,但仍然面臨着同樣的堆棧溢出錯誤。 – kk331317 2012-01-16 17:01:56

+0

我的getChildren()類的方法實現ITreeContentProvider看起來是這樣的: 公共對象[]的getChildren(對象parentElement) \t \t {\t \t \t \t如果(parentElement的instanceof指數) \t \t \t { \t \t \t \t Index ind1 =(Index)parentElement; \t \t \t \t return ind1.getSetOfKeyValue(); \t \t \t} \t \t返回模型。getSetOfChilds(); \t \t – kk331317 2012-01-16 17:31:08

+0

}堆棧跟蹤 在org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2362) 在org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1536) 在org.eclipse.swt.widgets.Control.windowProc(Control.java:4251) 在org.eclipse.swt.widgets.Tree.windowProc(Tree.java:5844) 在org.eclipse.swt.widgets.Display .windowProc(Display.java:4873) 在org.eclipse.swt.internal.win32.OS.SendMessageW(本機方法) 在org.eclipse.swt.internal.win32.OS.SendMessage(OS.java:3156) 在org.eclipse.swt.widgets.Tree.getItems(Tree.java:3249) 在org.eclipse.jface.viewers.TreeViewer.getChild仁(TreeViewer.java:171) – kk331317 2012-01-16 17:35:21