在 XMPP通讯开发-弹出好友通信对话框的逻辑设计 中我们实现双击好友弹出聊天的对话框,那只是一个框架,而我们要真是的实现聊天需要重写JDialog里面的内容JPanel。这里我们可以根据好友聊天需要的基本的功能,我们需要使用的是ChatManager这个聊天管理器,然后与指定用户建立Chat session,之后就可以发送和接收消息了。这部分我们可以看官方的文档smack_3_3_0\documentation\messaging.html里面Messaging using Chats,根据官网给出的例子,我们可以知道需要好友的XMPP的地址,还有就是connection,所以我们在构造JPanel的时候,需要传递这两个参数。我们看一下代码:
public void setChatPanel(XMPPConnection conn, String frindsXmppAddress){ this.conn = conn; this.frindsXmppAddress = frindsXmppAddress; CreateChatM(); dateUtils = new DateUtils(); chatName.setText(frindsXmppAddress); } private void CreateChatM(){ if(conn != null){ chatManager = conn.getChatManager(); chat = chatManager.createChat(frindsXmppAddress, new MessageListener(){ @Override public void processMessage(Chat chat, Message msg) { if(msg != null){ ChatMessage.append(dateUtils.getHM()+" "+frindsXmppAddress+": "+msg.getBody()+"\n"); } } }); } }
ChatPanel chatPanel = new ChatPanel(); chatPanel.setChatPanel(conn, "123@zhangjie"); JDialog chatDialog = new JDialog(); chatDialog.setContentPane(chatPanel); chatDialog.setSize(501, 512); chatDialog.setVisible(true);初始化ChatPanel后,然后设置那两个相关的参数,同时创建对话信息,然后启动JDialog显示界面,在下面的对话框中填写要发送的信息,点击发送,就会将填写的信息发送给123@zhagnjie上面,点击按钮功能如下:
private void SendChatBtnMouseClicked(java.awt.event.MouseEvent evt) { String Content = ChatContent.getText(); try { chat.sendMessage(Content); ChatMessage.append(dateUtils.getHM()+" 自己: "+Content+"\n"); ChatContent.setText(""); } catch (XMPPException ex) { Logger.getLogger(ChatPanel.class.getName()).log(Level.SEVERE, null, ex); } }另一个客户端我是用的是Spark进行测试的,效果图如下:
两个可以正常的通信。
源码项目:https://github.com/jwzhangjie/IChat_PC.git