Как отобразить данные из одного объекта в JTextArea другого объекта? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть один класс с именем обработчик, и этот класс обрабатывает http-запрос, поступающий из браузера, и я хочу отобразить http-заголовки запроса в JTextArea другого класса с именем HttpHeadersFrame!Вот что я пробовал

 public class Handler
 {
     HttpHeadersFrame headersFrame; //This frame contains JTextArea component
     private Request request = null;
     public String requestMessage;
     private Socket socket = null;

     public Handler(Socket socket)
     {
         this.socket = socket;
         this.headersFrame = new HttpHeadersFrame();
         headersFrame.setVisible(true);
     }

     public void processRequest()
     {
        requestMessage = request.toString(System.getProperty("line.separator"));
        headersFrame.getRequestTextArea().append(requestMessage);
     }
 }

Когда я запускаю прокси, я не получаю никаких сообщений в JTextArea!Любая помощь будет оценена

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Во-первых, в вашем фрагменте отсутствует правильное использование компонентов Swing.Вы должны инициализировать поле requestTextArea в конструкторе перед его использованием.А также вы должны добавить его в кадр с помощью оператора

this.getContentPane().add(requestTextArea);

Вы должны передать HttpHeadersFrame экземпляр вашему классу Handler, сделать этот экземпляр видимым, т.е.requestMessage в поле textArea этого экземпляра будет работать.

1 голос
/ 17 февраля 2012

В вашем методе processRequest вы создаете новый HttpHeadersFrame для каждого входящего запроса.Если вы не отобразите все эти кадры, вы будете постоянно обновлять невидимый кадр вместо единственного видимого.Поэтому передайте видимый HttpHeadersFrame экземпляр вашему Handler классу, создавая новые экземпляры, и ваша проблема будет решена.

О, и, пожалуйста, не забудьте обновить компоненты Swing в потоке диспетчеризации событий.

...