销毁类的实例然后再次创建它的实例

时间:2013-05-03 13:07:47

标签: java swing components awt

我有一个包含按钮的类(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的实例

怎么办?

感谢..

原谅我的英语..

1 个答案:

答案 0 :(得分:3)

您无法在Java中显式销毁对象。一旦没有更多对象的引用(想想指针),它将被标记为有资格被垃圾收集。因此,您的代码几乎,因为它删除了对DialogX实例的旧引用并创建了一个新引用。 您需要做的是使用DialogX类扩展JDialog(然后可以完全删除JDialog变量)或者在JDialog变量static之前删除g keywoard。然后你可以调用dialogx.dispose()(扩展的JDialog)或你需要实现的自定义方法,将调用转发给g.dispose()(你没有扩展JDialog)。