Можете ли вы помочь мне здесь? Действительно простая проблема, но я просто не могу понять, каково ее решение!
Я кодирую приложение прослушивателя, которое работает в своем собственном потоке и прослушивает ServerSocket для входящих соединений.
Когда приходит соединение, в новом потоке создается новый объект «Сообщение», которому передаются входящие текстовые данные «messageData
». Этот объект должен затем отобразить текст пользователю во всплывающем окне.
In 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 является 'View', а объект Message является комбинацией модели и контроллера.
Каждый объект Message изначально создает себя с помощью статического метода Message.display()
. Это означает, что может существовать неограниченное количество объектов Message, существующих независимо, и слушателю не нужно беспокоиться об их управлении.
Отлично. Однако теперь у меня есть проблема.
Когда пользователь нажимает «ОК» в графическом интерфейсе, я хочу (а) удалить / скрыть графический интерфейс И (б) удалить объект сообщения из памяти.
Как я могу сделать (а) и (б)? Я могу сделать (а)
gui=null
in gui.addOKListener()
(см. Выше), но я не могу сделать (b), потому что у меня нет ссылки на объект Message.
Я пытался определить addOKListener () в Message.display()
, но это не работает, потому что мне нужно сделать объект message
, который я создаю final, поэтому message=null
недопустимо.
Действительно простая проблема - я думаю, решение тоже простое. Это очень расстраивает ..
Большое спасибо
Будет