java - 如何修复“在构造函数中泄漏”警告

时间:2012-02-21 15:18:00

标签: java netbeans this

  

可能重复:
  Java - Leaking this in constructor

在NetBeans中,我有一个包含JPanel的JDialog。我试图将JDialog的引用传递给JPanel。请看下面的代码。当我按照我的方式这样做时,我会收到“在构造函数中泄漏”警告。我理解为什么,但我不知道如何解决这个问题。我也知道我可以使用@SuppressWarnings(“LeakingThisInConstructor”)但是没有真正的方法来解决这个问题而不会抑制警告吗?

public class MyJDialog extends javax.swing.JDialog {

    public MyJDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        MyJPanel.getThis(this);
    }
}

public class MyJPanel extends javax.swing.JPanel {

    private JDialog dialog;

    public MyJPanel() {
        initComponents();
    }

    public void getThis(JDialog dialog){
        this.dialog = dialog;
    }
}

3 个答案:

答案 0 :(得分:2)

如果我理解正确,那么JDalog正在创建JPanel实例。在这种情况下,您可以通过JPanel的构造函数将引用传递给JDIalog。

在MyJPanel类中:

  public MyJPanel(JDialog dialog) {
    initComponents();
    this.dialog = dialog;
  }

在你创建MyJPanel的JDialog中你可以这样做:

  myPanel = new MyJPanel(this);

答案 1 :(得分:1)

构造函数将返回对话框的引用。创建实例后,让面板设置变量。

public class MyJPanel extends JPanel {
  private JDialog dialog;

  public MyJPanel(Frame aFram) {
    dialog = new MyJDialog(aFrame, true);
  }
}

此外,该代码无效,因为getThis()不是静态方法,因此需要引用MyJPanel实例。

答案 2 :(得分:1)

您可以坚持使用@SuppressWarnings("LeakingThisInConstructor"),因为所有UI对象都是在 Swing 应用中的主题中创建的,因此传递{{没有问题1}}在Swing组件的consturctor的最后一行。