java-如何修复;“将此泄漏到构造函数中”;警告

java-如何修复;“将此泄漏到构造函数中”;警告,java,netbeans,this,Java,Netbeans,This,可能重复: 在NetBeans中,我有一个包含JPanel的JDialog。我试图将JDialog的引用传递给JPanel。请看下面我的代码。当我这样做的时候,我收到了“在构造函数中泄漏此内容”的警告。我知道为什么,但我不知道如何解决这个问题。我也知道我可以使用@SuppressWarnings(“LeakingThisInConstructor”),但是没有一种真正的方法可以在不抑制警告的情况下解决这个问题吗 public class MyJDialog extends javax.swin

可能重复:

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

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

public class MyJPanel extends JPanel {
  private JDialog dialog;

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

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

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

public class MyJPanel extends JPanel {
  private JDialog dialog;

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

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

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

在MyJPanel类中:

  public MyJPanel(JDialog dialog) {
    initComponents();
    this.dialog = dialog;
  }
在JDialog中创建MyJPanel的地方,您可以执行以下操作:

  myPanel = new MyJPanel(this);

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

在MyJPanel类中:

  public MyJPanel(JDialog dialog) {
    initComponents();
    this.dialog = dialog;
  }
在JDialog中创建MyJPanel的地方,您可以执行以下操作:

  myPanel = new MyJPanel(this);

您可以坚持使用
@SuppressWarnings(“LeakingThisInConstructor”)
,因为所有UI对象都是在Swing应用程序中的单个线程中创建的,所以在Swing组件的constructor的最后一行传递
这个
没有问题。

您可以坚持使用
@SuppressWarnings>(“泄密者”)
,因为所有UI对象都是在Swing应用程序中的单个线程中创建的,所以在Swing组件的constructor的最后一行传递
这个
是没有问题的。

谢谢。你介意给我一个代码示例吗,因为我对Java非常陌生?再次谢谢你。你介意给我一个吗给我一个代码示例,因为我对Java非常陌生?再次感谢您这是一个静态编译吗?MyJPanel.getThis()是一个静态方法,initComponents()是在哪里定义的?这是一个静态编译吗?MyJPanel.getThis()是一个静态方法,initComponents()是在哪里定义的?