2013-06-06 96 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。那真的是你想要的嗎?如果是聊天服務,當客戶端客戶端連接時註冊動作偵聽器會更有意義嗎?如果您處理多個客戶端,這可能並不合適。