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

标签 java memory-leaks swt jface

我应该处置从 EditingSupport.getCellEditor 返回的 CellEditor 吗?如果是,我应该什么时候处置。

在 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;
    }

最佳答案

如果您对 ViewerColumns 使用这样的 EditingSupport,第一个片段对我来说看起来像是一个令人讨厌的泄漏。看看ColumnViewerEditor的来源就行了,该类处理有关 CellEditors 的大量工作。有很多像

这样的行
if(part.getEditingSupport() != null)

(其中 partViewerColumn)。这些调用在 TextCellEditor 的构造函数中创建一个 Text 实例。但由于 EditingSupport 实例未分配,因此它会立即被GC。 Text 实例不会被释放(直到它的父实例被释放)。泄漏。

所以你的第二个片段看起来更好。

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

关于java - 我应该处理从 EditorSupport 返回的 jface CellEditors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008680/

相关文章:

java - 我的 GWT 应用程序仍然使用旧的 .jasper (编译模板)而不是使用新的原因是什么

java - GenerationTarget接受命令时遇到异常: Error executing DDL engine=MyISAM"via JDBC Statement

actionscript-3 - ActionScript 3 : Memory Leak in Server Polling Presentation App

键删除后 ruby​​ 哈希内存泄漏

java - 当 SWT 中 tabItem 列表发生更改时,TabItem 不会刷新

java - gwt jsni document.documentElement.style.height

java - setSize(WIDTH, HEIGHT) 和 setSize(new Dimension(WIDTH, HEIGHT)) 之间的区别

c++ - 将 auto_ptr 与 new char[n] 一起使用是否错误

java - 调整大小时行布局不更改控件

Java从ArrayList中获取子内容