2013-06-06 66 views
0

我目前正在尝试使用netty创建聊天服务。我从一些源代码中提取了我的参考,并且我想实现一个简单的GUI,其中在服务器端,一个按钮“发送“必须被点击,以便消息可以被发送回客户端。 我基本上试图在我的messageReceived channelhandler中实现一个ActionListener,但我遇到了一些问题,因为我无法使用客户端的通道写回我的消息,因为非最终变量无法引用的问题它是在一个不同的方法定义的内部类。我希望有一些建议来克服这个问题。请大家给予您的协助!如何在netty聊天服务器端正确实现GUI

ServerHandler的messageReceived代码:

@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); 
     } 
    } 

    }); 

}   

回答

1

您可以创建被传递在其构造通道自定义的ActionListener类。

此外,您的代码将为每个收到的消息在按钮上注册一个新的ActionListener。那真的是你想要的吗?如果是聊天服务,当客户端客户端连接时注册动作侦听器会更有意义吗?如果您处理多个客户端,这可能并不合适。