Как исправить предупреждение "Утечка в конструкторе"
Возможный дубликат:
Java - Утечка в конструкторе
В NetBeans у меня есть JDialog, который содержит JPanel. Я пытаюсь передать ссылку на 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 ответа
Конструктор вернет ссылку на диалог. Сделайте так, чтобы панель сама установила переменную после создания экземпляра.
public class MyJPanel extends JPanel {
private JDialog dialog;
public MyJPanel(Frame aFram) {
dialog = new MyJDialog(aFrame, true);
}
}
Кроме того, этот код не будет работать, потому что getThis()
не является статическим методом, поэтому требует ссылки на MyJPanel
пример.
Если я вас правильно понимаю, JDialog создает экземпляр JPanel. В этом случае вы можете передать ссылку на JDIalog через конструктор JPanel.
В классе MyJPanel:
public MyJPanel(JDialog dialog) {
initComponents();
this.dialog = dialog;
}
И в JDialog в точке, где вы создаете MyJPanel, вы можете сделать это:
myPanel = new MyJPanel(this);
Вы можете придерживаться @SuppressWarnings("LeakingThisInConstructor")
, потому что все объекты пользовательского интерфейса создаются в одном потоке в приложении Swing, поэтому нет проблем для передачи this
на последней строке констурктора компонента Swing.