我目前正在尝试使用netty创建聊天服务。我从一些源代码中获取了我的参考资料,我想实现一个简单的GUI,在服务器端,必须单击一个“send”按钮,这样消息可以被送回客户端。 我基本上尝试在我的messageReceived channelhandler中实现一个ActionListener,但是我遇到了一些问题,因为我无法使用来自客户端的通道来回写我的消息,因为非最终变量无法引用它的问题是在一个用不同方法定义的内部类。我希望能有一些建议来克服这个问题。请大家帮忙!
ServerHandler messageReceived code:
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {
System.out.println("Received message from client: " + e.getMessage());
String msgclient = (String) e.getMessage();
ta.append("[From Client]" + msgclient + "\n");
Channel c = e.getChannel();//can't declare it as final also,make no sense
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
if(a.getSource()==bt){
String serversentence=tf.getText();
ta.append("[Server]" + serversentence + "\n");
c.write(serversentence + "\n\r");
if (serversentence.toLowerCase().equals("shutdown"))
shutdown();
tf.setText(null);
}
}
});
}
答案 0 :(得分:1)
您可以创建一个自定义的ActionListener类,该类在其构造函数中传递通道。
此外,您的代码将在按钮上为每个收到的消息注册一个新的ActionListener。这真的是你想要的吗?如果是聊天服务,那么在客户端客户端连接时注册动作监听器会更有意义吗?如果您正在处理多个客户端,这可能不合适。