Java的:从GUI中删除GUI对象(Java: Deleting a GUI object fro

2019-10-19 12:04发布

你能帮助我在这里? 一个非常简单的问题,但我只是无法得到解决的办法是什么!

我编码是在自己的线程中运行和侦听传入连接的ServerSocket侦听器应用程序。

当一个连接到达时,一个新的“消息”对象上的新的线程创建和传递的传入文本数据“ messageData ”。 那么这个对象应显示在弹出窗口中的文本给用户。

在Listener.java:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {

        Message.display(messageData);

    }
});

然后,在Message.java:

public Message {

    public static void display(String data) {

        Message message = new Message(data);

        message.initGUI();

    }

    String messageData;

    GUI gui;

    public Message(String data) {

        messageData = data;

        gui = new GUI();

    }

    public void initGUI() {

        gui.init();

        // add listeners
        gui.addOKListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                // close GUI
                javax.swing.SwingUtilities.invokeLater(new Runnable() {

                    public void run() {
                        gui.close();
                    }
                });

                gui = null;

            }
        });

    }

    public class GUI {
        do GUI stuff 
        ... initialise gui
        ... add components
        ... setVisible=true
    }
}

这个想法是,内部类GUI是“查看”和该消息对象是模型和控制器组合。

每个消息对象最初通过静态创建本身Message.display()方法。 这意味着可以无限制的消息对象都独立存在和监听不必担心如何管理它们。

大。 但是我现在有一个问题。

当在GUI上的用户点击“OK”,我想的(a)的GUI将被删除/隐藏,和(b)的消息对象从存储器中删除。

我该怎么办(一)和(b)? 我可以做的(a) gui=nullgui.addOKListener()见上文),但因为我没有到消息对象的引用我不能这样做(b)中。

我曾试图定义addOKListener() Message.display()但是,这并不工作,因为我必须作出message ,我创造的最终目的,因此message=null是非法的。

一个非常简单的problem-我猜解决方案也很简单。 这是非常令人沮丧..

非常感谢

Answer 1:

如果你想要做的是显示与一个简短的测试消息给用户一个对话框,如果你使用的JOptionPane和在那里的静态工厂方法之一,它应该是一个容易得多。

看一看的教程



Answer 2:

你不能强迫对象从内存中删除,但dispose方法可能是你在找什么,除去GUI:

// close GUI
javax.swing.SwingUtilities.invokeLater(new Runnable() {

    public void run() {
        gui.dispose();
    }
});

这是假设你的GUI类扩展JDialogJFrame



Answer 3:

如果你有一个弹出窗口,那么你有一个框架的地方。 框架是其存在,即使没有一个人守一个参考给他们(当然,虚拟机可能不会,但不必)顶级对象。

所以,解决的办法是等待在弹出的确定或关闭按钮点击,然后就丢弃它。 不要把对弹出引用任何地方,虚拟机将清理你。



文章来源: Java: Deleting a GUI object from within the GUI