2011-05-15 45 views
2

我是否應該從EditingSupport.getCellEditor返回CellEditor,如果是這樣,我應該怎麼做。我是否應該處理從EditorSupport返回的jface CellEditors

論的JFace TableViewer教程之一,我看到下面的代碼片段:

public class FirstNameEditingSupport extends EditingSupport { 

    @Override 
    protected CellEditor getCellEditor(Object element) { 
     return new TextCellEditor(viewer.getTable()); 
    } 

所以將這種方法泄漏內存,如果電池被編輯了多次?或者我應該只是懶惰初始化CellEditor

public class FirstNameEditingSupport extends EditingSupport { 

    CellEditor editor; 

    @Override 
    protected CellEditor getCellEditor(Object element) { 
     if(editor == null){ 
      editor = new TextCellEditor(viewer.getTable()); 
     } 

     return editor; 
    } 

回答

3

的第一個片段看起來像一個討厭泄漏給我,如果你使用這樣的EditingSupportViewerColumns。只需看看ColumnViewerEditor的來源,該類處理大量CellEditors的工作。有許多線像

if(part.getEditingSupport() != null) 

(具有part是一個ViewerColumn)。這些調用在TextCellEditor的構造函數中創建Text實例。但由於EditingSupport實例未分配,因此它將立即被GCed。 Text實例不會被處置(直到其父代被處置)。泄漏。

所以你的第二個片段似乎更好。

哪個教程?也許你應該報告。

+0

它來自:http://www.vogella.de/articles/EclipseJFaceTable/article.html#viewer – 2011-05-16 20:38:07

相關問題