Java:从GUI中删除GUI对象
Java:从GUI中删除GUI对象
你能帮我解决这个问题吗? 这是一个非常简单的问题,但我就是无法得到解决方案!
我正在编写一个监听器应用程序,它在自己的线程上运行,并在ServerSocket上侦听传入的连接。
当一个连接到达时,会在一个新线程上创建一个新的 \'Message\' 对象,并将传入的文本数据 \"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 对象是模型和控制器的组合。
每个 Message 对象最初通过静态 Message.display()
方法创建自己。这意味着可以有无限个 Message 对象独立存在,而 Listener 不必担心管理它们。
很好。现在我有个问题。
当用户单击 GUI 的“确定”按钮时,我希望 (a) GUI 被删除 / 隐藏,并且 (b) Message 对象从内存中删除。
我该如何做到 (a) 和 (b)?我可以通过在 gui.addOKListener()
中添加 gui=null
来做到 (a)(请参见上文),但是我无法做到 (b),因为我没有引用 Message 对象。
我曾尝试在 Message.display()
中定义 addOKListener(),但这样做不起作用,因为我必须将创建的 message
对象设置为 final,因此 message=null
是不合法的。
这是一个非常简单的问题,我猜解决方案也很简单。这非常令人沮丧......
非常感谢
Will
admin 更改状态以发布 2023年5月21日