我应该处理从EditorSupport返回的jface CellEditors

时间:2011-05-15 13:30:40

标签: java memory-leaks swt jface

我应该处理从CellEditor返回的EditingSupport.getCellEditor,如果是,我应该何时执行此操作。

关于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;
    }

1 个答案:

答案 0 :(得分:3)

如果您对EditingSupport使用ViewerColumns,那么第一个片段对我来说就像是一个令人讨厌的泄漏。只需查看ColumnViewerEditor的来源,该类处理CellEditors周围的大量工作。有许多行,如

if(part.getEditingSupport() != null)

partViewerColumn)。这些调用在Text的构造函数中创建TextCellEditor实例。但由于未分配EditingSupport实例,因此将立即进行GC。 Text实例不会被处理(直到其父级被处置)。泄漏。

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

哪个教程?也许你应该报告。