首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPanels的Java内存泄漏问题

JPanels的Java内存泄漏问题
EN

Stack Overflow用户
提问于 2009-10-01 14:26:51
回答 1查看 2.1K关注 0票数 1

Java内存泄漏

代码语言:javascript
复制
private boolean refreshResponseWindow(MessageObject message) {
  this.responsePanel.removeAll();
  this.responsePanel.add(message.buildGUI());
  this.responsePanel.validate();
  message = null;
  return true;

}

现在出现的问题是,当我收到越来越多的消息时,Java程序的内存使用量不断增加,最终导致它锁定。我已经将内存泄漏隔离到上面的代码中,特别是add过程调用。我假设removeAll会清除我面板中的内容,但它似乎仍在继续增长。

注意: message.buildGUI()返回在responsePanel上显示的JPanel

跟进:

BuildGUI代码如下所示

代码语言:javascript
复制
public JPanel buildGUI() throws Exception {
    JPanel busPanel = new JPanel();
    busPanel.setLayout(new GridBagLayout());
    busPanel.setPreferredSize(new Dimension(Globals.panelW, Globals.panelH));
    busPanel.setMinimumSize(new Dimension(Globals.panelW, Globals.panelH));

    final JLabel headingLabel = new JLabel();
    headingLabel.setFont(new Font("", Font.PLAIN, 18));
    headingLabel.setText(this.name);
    final GridBagConstraints gridBagConstraints_heading = new GridBagConstraints();
    gridBagConstraints_heading.gridwidth = 2;
    gridBagConstraints_heading.gridy = 0;
    gridBagConstraints_heading.gridx = 0;
    busPanel.add(headingLabel, gridBagConstraints_heading);
    //Many more gui components marked as final
    return busPanel;

没有侦听器返回的面板仅用于显示。

EN

回答 1

Stack Overflow用户

发布于 2009-10-01 14:30:41

buildGUI方法是否向您的业务对象添加侦听器?这是内存泄漏的常见来源。调用responsePanel.removeAll()将删除这些组件,但这些组件仍可能注册为responsePanel或其他对象上的侦听器,从而使它们保留在内存中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1504292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档