我有一个名为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中没有收到任何消息!如有任何帮助,将不胜感激
首先,您的代码片段中缺少对Swing组件的正确使用。在使用构造函数中的requestTextArea
字段之前,应该先对其进行初始化。此外,您还必须将其添加到带有声明的框架中
this.getContentPane().add(requestTextArea);
您应该将HttpHeadersFrame
实例传递给Handler类,使该实例可见,即
headersFrame = new HttpHeadersFrame();
headersFrame.setVisible();
将requestMessage
附加到该实例的textArea字段中即可。
在processRequest
方法中,您为每个传入请求创建一个新的HttpHeadersFrame
。除非显示所有这些帧,否则将不断更新不可见的帧,而不是唯一可见的帧。因此,将一个可见的HttpHeadersFrame
实例传递给Handler
类iso以创建新实例,您的问题就会得到解决。
哦,请确保更新事件调度线程上的Swing组件。