你能幫我解決嗎?一個非常簡單的問題,但我無法得到解決方案!Java:從GUI中刪除GUI對象
我正在編寫一個在其自己的線程上運行的偵聽器應用程序&在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()
方法創建自己。這意味着可以獨立存在無限的Message對象,並且Listener不必擔心管理它們。
太好了。不過,我現在有一個問題。
當用戶在GUI上點擊'OK'時,我想要(a)刪除/隱藏GUI,以及(b)要從內存中刪除的消息對象。
我該怎麼辦(a)和(b)?我可以做(a) gui=null
在gui.addOKListener()
(見上面),但我不能做(b)因爲我沒有對Message對象的引用。
我試圖在Message.display()
中定義addOKListener(),但這不起作用,因爲我必須使message
對象創建最終,因此message=null
是非法的。
一個非常簡單的問題 - 我猜解決方案也很簡單。這是非常令人沮喪..
非常感謝
威爾
是的,這可能是目前最好的方法 – Imme22009 2010-02-10 14:45:16