我有一个名为handler的类,这个类处理来自浏览器的http请求,我想在另一个名为HttpHeadersFrame的类的JTextArea中显示请求的http头!这就是我试过的
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中没有收到任何消息!任何帮助将不胜感激
答案 0 :(得分:1)
在processRequest
方法中,您可以在每个传入请求中创建新的HttpHeadersFrame
。除非您显示所有这些帧,否则您将不断更新不可见的帧而不是唯一可见的帧。因此,将可见的HttpHeadersFrame
实例传递给Handler
类iso,创建新实例,您的问题就会得到解决。
哦,请确保在事件调度线程上更新Swing组件。
答案 1 :(得分:1)
首先,您的代码段中没有正确使用Swing组件。
在使用之前,您应该在构造函数中初始化requestTextArea
字段。
而且你必须用语句
this.getContentPane().add(requestTextArea);
您应该将HttpHeadersFrame
实例传递给您的Handler类,使此实例可见,即
headersFrame = new HttpHeadersFrame();
headersFrame.setVisible();
将requestMessage
附加到此实例的textArea字段将起作用。