基于Java技术的即时聊天系统实现(3)

2019-03-09 19:29

商丘师范学院2015届本科毕业论文(设计)

图5- 4好友列表界面

5.1.5 聊天窗口界面 聊天窗口界面(3-9)是即时聊天系统里最重要的部位,在这我们能够进行交流,发送表情,发送文件,音乐,视频等,它是软件中的灵魂。从图片上看它只是个普通的界面,但是它拥有很多没有展示的部分,例如表情窗口、聊天记录界面、字体样式选框等。在这个普通的界面中运用到了JWindow、JTextPane、和JSplitPane组件。 JTextPane是一个可以编辑和显示图片、文本Html等的富文本组件。 JWindow是一个窗口容器。但是它不像JFram那样,它不具有标题栏、窗口管理按钮等,我自认为它是做表情窗口最佳的选择。 JSplitPane分隔组件。两个组件图形化分隔以外观实现为基础,并且这个组件可以由用户自由调整大小。 代码如下:

JLabel jl[]=new JLabel[105]; String file_names=\for(i=0;i

file_names=\

jl[i]=new JLabel(new ChatIcon(QqChatFaceWindow.class.getResource(file_names),i), SwingConstants.CENTER); jl[i].setToolTipText(i+\ jl[i].addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e){

if(e.getButton()==1){

JLabel facelabel = (JLabel)(e.getSource());

ChatFrame.insertFace(facelabel.getIcon()); }

8

商丘师范学院2015届本科毕业论文(设计)

}

}

});

jp.add(jl[i]);

图5- 5聊天窗口界面

5.1.6 服务器端界面 服务端仅是用来开启Socket,界面并没有什么太多的功能,只是两个按钮而已,在这里就不做过多的介绍了。

5.2 功能实现

在实现功能之前我们需要做一些必要的共同类。首先我们需要做一个用户信息类(User),接着是信息类(Message),其次是消息类型类(MessageType),它们不需要做过多的设计,只需要定义一些需要的变量,然后对其进行Set和Get即可。 5.2.1 实现登录 实现登录功能还是一个比较简单的功能,只需要我们获取到用户的登录帐号和登录密码,通过对象流将对象(u)给传递给服务器,服务器通过Get方法获取帐号和密码,然后从数据库中查询用户的密码字段信息进行对比,将对比的后的信息再通过对象流的方式传递给客户端,再进行相应的处理。 代码如下:

User M=new User();

M.setUserNo(Sjtf.getText().Trim());

M.setPasswd(MD5.GetMD5Code(new String(jpf.getPassword()))); M.setType(MessageType.message_login);

QqClientUser qqClientUser=new QqClientUser(); if(qqClientUser.checkUser(M)){

QqFriendListFrame PeopleList =new QqFriendListFrame(M. getUserNo ()); //将好友聊天窗口添加到集合中 QqFriendList.AddFriendPeople(M.getUserNo(), PeopleList); ObjectOutputStream oos = null; try {

9

商丘师范学院2015届本科毕业论文(设计)

oos=newObjectOutputStream(M.getUserNo ().getS().getOutputStream()); } catch (IOException e1) { e1.printStackTrace(); } Msges S=new Msges ();//做一个Message S.setMesType(Msges.message_get_allFriend); S.setSender(M.getUserNo());//指明我要的是这个帐号的全部好友 }

5.2.2 实现注册 注册功能需要将用户在注册界面的填写信息和相应的选择信息,通过对象流的形式将对象(u)传递给服务器,服务器调用数据库插入代码即可。代码如下: MessageArray R=new MessageArray(); String []Str=new String[6]; MD5 getMD5 = new MD5(); Str[0]=nick_jtf.getText(); Str[1]=num_jtf.getText();

Str[2]=getMD5.GetMD5Code(String.valueOf(jpf1.getPassword())); Str[3]=SEX;

Str[4]=bir_jb1.getSelectedItem().toString()+bir_jb2.getSelectedItem().toString()+bir_jb3.getSelectedItem().toString();

Str[5]=addr_jb1.getSelectedItem().toString()+\

\ R.setStr(Str);

User M=new User();

M.setStr(Str);u.setType(MessageType.message_ret_register); ClientUser qqClientUser=new ClientUser(); if(qqClientUser.register(M)){ dispose(); new ClientLogin(); }

5.2.3 实现修改密码 密码的修改相对的简单,用户只需要根据相应的选项卡填写,就能够进行密码的修改,至于实现的代码如下: User M=new User(); M.setUserId(m[0]); M.setNick(\

M.setPasswd(MD5.GetMD5Code(m[1]));

M.setNewpassword(MD5.GetMD5Code(m[2])); M.setType(MessageType.message_rel_password); ClientUser qqClientUser=new ClientUser(); if(qqClientUser.relpasswored(M)){ dispose(); new ClientLogin(); }

10

商丘师范学院2015届本科毕业论文(设计)

5.2.4 添加、删除好友 添加好友相对于删除好友,是一件比较麻烦的事情,具体的思路是:当用户在添加好友输入框中输入想要添加好友的帐号,然后通过对象流将对象(m)传送给服务器,服务器通过后台HashMap集合获取好友的线程,然后将对象传递给好友。对于如何获取到好友的线程呢?在这里就粗略的讲述一下:本系统在每个用户登录的时候,服务器都会为每个用户新建一个线程,同时将每个用户的线程和其帐号通过HashMap进行键值对的绑定,到使用的时候服务器只需通过帐号就能获取到相应的帐号线程,这样就能够很简单的帮我们想要传递的信息转发给相应的好友。代码如下:

public HashMap Thread=new HashMap(); //向hm中添加一个客户端通讯线程

public static void SetClients (String No, ServerConnecClient Sct){ Thread.put(No, Sct); }

public static ServerConnectClient getClient(String No){ return Thread.get(No); }

图5- 6添加、删除好友选项框

图5- 7添加好友提示框

5.2.5 移动黑名单 黑名单功能是每个即时聊天软件必不可少的功能,对于本系统的黑名单功能,那么我又是如何实现的呢?其实在方法是比较简单的,JTree提供一个自带的方法,它允许子节点进行移动,我们能够在界面上看到相互之间的移动,那么剩下的问题就是数据库存储的问题了。对于通常系统的黑名单,你将对方添加至黑名单,但对方并未将你删除或者也添加至黑名单;而且本系统的数据库中的好友字段在添加好友的时候只是将要添加好友的帐号追加到自己的好友字段中,好友的字段不做任何的处理,所以在添加黑名单的时候,你不知道自己的好友字段中是否有此帐号;本着简单的原则,我们只要将你想添加黑名单的帐号追加到你的黑名单字段,对于其在你好友字段中不做任何的处理。只需要在提取好友ID信息的时候把存在黑名单中的好友ID移出即可。代码如下: public ArrayList getfriend(String userId){ String sql1=\ String sql2=\ String sql3=\ SqlHelper sqlhelp=new SqlHelper(); ArrayList str=sqlhelp.execute_getfriends(sql1, sql2,sql3); ArrayList al=new ArrayList(); Object[]tr1=(Object[])tr.get(0); Object[]tr2=(Object[])tr.get(1);

11

商丘师范学院2015届本科毕业论文(设计)

for(int i=0;i

5.2.6 多对多聊天 多对多的聊天是本系统的一个比较亮点的设计,用户能够在同一时间跟多个用户进行聊天,对于聊天的内容不会错乱。同绑定线程一样,在用户开启好友聊天界面的时候,客户端将你的帐号同聊天好友的帐号组合在一起,通过HashMap的键值对的形式将组合后的字符串和这个窗口进行绑定,每开启一个窗口都进行绑定,等到客户端接受到服务器发送来的信息,进行相应的处理,即可将信息追加到对应的聊天窗口中。 代码如下:

Msges S=new Msges ();

if(S.get Msges ().equals(\ if(QqChat.getChat(m.getGetter()+\ QqFriendChatFrame FriendChat=new QqFriendChatFrame(m.getGetter(),m.getSender()); QqChat.addQqChat(m.getGetter()+\

}

QqFriendChatFrame FriendChat=QqChat.getQqChat(m.getSender()+\if(!qqChat.isVisible()){ qqChat.setVisible(true);

}

FriendChat.AddMeg(m.getSender(), m.getCon(), m.getPic(), m.getFname(), m.getFSize(), m.getFstyle(), m.getFColor());//显示 }

5.2.7 显示表情 在本聊天系统中,用户能够发送表情图片,然而图片跟文字是不一样的,不能够直接的显示在聊天窗口上的,也不能直接的传送给好友,也不能将其直接的存放在数据库中;因此,我专门给显示表情编写了一些必要的函数。由于本系统是C/S架构的,每一个客户端都是一样的,系统内存放着这些表情图片,而且每一个表情图片都有自己相应的Id;因此,我们只需要提取到使用的表情图片的Id,以及获得它在发送信息的位置即可,到时我们只需要将发送的文本和表情的Id及其在发送信息的位置发送过去即可,客户端内置一些专门处理表情的函数,代码如下:

12


基于Java技术的即时聊天系统实现(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:市场总监职责与绩效工资

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: