我有一个包含按钮的类(Class ButtonX)
当用户点击该按钮时,它将创建类DialogX
当我创建类DialogX
的实例时,它将显示JDialog
public class ButtonX {
public ButtonX() {
JFrame me = new JFrame();
JButton n = new JButton("show dialog");
n.addActionListener(ListenerX.listen);
me.getContentPane().add(n);
me.pack();
me.setVisible(true);
}
public static void main (String[]args){
new ButtonX();
}
}
那个JButton
的听众
public class ListenerX {
public static ActionListener listen = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DialogX dialogx = null;
dialogx = new DialogX();
}};
}
包含JDialog
public class DialogX {
static JDialog g = new JDialog();
public DialogX() {
JLabel label = new JLabel("label");
g.getContentPane().setLayout(new FlowLayout());
g.getContentPane().add(label);
g.pack();
g.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
g.setVisible(true);
}
}
我尝试实现的是,当用户单击该按钮时,它将销毁类DialogX
的实例(如果存在),然后再次创建DialogX
的实例
怎么办?
感谢..
原谅我的英语..
答案 0 :(得分:3)
您无法在Java中显式销毁对象。一旦没有更多对象的引用(想想指针),它将被标记为有资格被垃圾收集。因此,您的代码几乎,因为它删除了对DialogX实例的旧引用并创建了一个新引用。
您需要做的是使用DialogX类扩展JDialog
(然后可以完全删除JDialog变量)或者在JDialog变量static
之前删除g
keywoard。然后你可以调用dialogx.dispose()
(扩展的JDialog)或你需要实现的自定义方法,将调用转发给g.dispose()
(你没有扩展JDialog)。