基于Java的仿QQ即时聊天系统

Livealone

发布日期: 2019-07-14 10:22:09 浏览量: 394
评分:
star star star star star star_border star_border star_border star_border star_border
*转载请注明来自write-bug.com

一、项目需求分析

1.1 项目介绍

这是一个模仿QQ的即时聊天软件,可以通过运行在本地的服务端,实现两个客服端之间的通信,即聊天。采用的是javafx架构作为GUI设计架构,个人认为优点是可以自己设计css,使界面达到美观的目的。本项目共有登录、注册、重置密码、主界面发消息、添加好友、好友列表项、查看聊天记录、删除聊天记录、未读消息提醒、好友主页、我的主页等模块,还实现了聊天气泡以及皮肤,消息提示音。该项目还调用了短信验证码的api和图灵机器人的api。在进行注册和重置密码时,都会有发送验证码的按钮,通过输入的手机号接收验证码。每个人的账号都会有个聊天助手,聊天助手就是接入的图灵机器人,可实现自动智能回复。

二、系统分析与设计

2.1 本程序需解决的关键技术问题

  • 短信验证码和图灵机器人的api调用

  • 多个客户端通过多线程的方式与服务端实现通信

  • 好友列表项通过listView来实现,将每个好友作为一个pane,将信息放在pane上,把新加的好友直接添加到好友列表

  • 聊天记录的实现,两方发的消息一左一右的显示,好友的消息作为一个pane添加在listview的左边,我的消息作为一个人pane添加好listview的右边

  • 两个好友之间发消息的气泡的大小自动调整,根据传入的消息的类型和长度来设置气泡的高度和宽度

  • 记住密码和自动登录的复选框的DIY设计,通过三个方框来作为按钮的背景来实现三种状态的不同显示

  • 实现编辑我的资料时不跳转页面,即在我的主页直接进行编辑,点击编辑会显示完成按钮,点击完成后隐藏

  • 实现我的信息数据在多个页面之间的调用。通过写了一个userdata类来管理我的信息,登录时将我的信息从数据库中读取出来,然后通userdata调用

  • 聊天气泡皮肤的实现,将一个气泡皮肤分成七个部分来实现,将七个部分完美拼接

  • 消息提示音的设置,通过导入jar包来实现java播放MP3文件

2.2 功能模块

三、项目设计与实现

3.1 工程文件组织结构

3.2 程序设计

Controller是个全局操作类,所有的登录、注册、运行、不同界面之间的连接等主要功能都在这里实现。Model里面都是一些数据库操作、气泡调整助手、验证码api、图灵api等,还有一些数据的操作类,View里面主要就是界面的设计及功能的实现。Main就是个主函数,运行controller以运行整个程序。

Companion表:我的好友,里面将每个账号都匹配自己的好友和好友的备注。

Dialog表:将已经登录的账号临时存储在这个表中,当账号注销后,自动清除。

Offlinemsg表:将发给不在线好友的离线消息存储起来,当对应好友读取完信息后就删除信息。

Save_pass表:把勾选了记住密码的账号和密码存储在这个表中,打开程序时自动显示到对应的文本框。

user表:存储用户所有信息的表。

登录界面

进行了账号和密码的验证,同时还有记住密码的选项,当你登录账号时勾选了该选项,下次将在登录界面展示前显示在输入框中。还会检查该账号是否已经登录,如果已经登录则不能再进行登录。如果该账号登录成功后会将该账号数据暂时存储在一个表dialog中。界面是仿QQ登录界面设计的,背景用的是类QQ登录界面的gif动画实现的。另外当鼠标焦距输入款时,对应的图标会发生变化,其实是背景图的变化。自定义了界面的最小化和关闭按钮以及记住密码复选框,使得界面更加的美观。

注册界面

该界面有一些注册信息的验证,采用的是java的正则匹配。首先会对输入框进行验证,如果为空则显示提示信息。如果不符合正则匹配也会提示相应的错误信息。当你输入了手机号后,还要点击获取验证码的按钮,获取到一个六位数的随机验证码,当你正确输入验证码后才可以进行注册。另外这里还有一个选择头像的设置,点击选择头像,会展示系统自带的一些头像,你可以进行选择自己喜欢的。

忘记密码

其实该界面跟注册界面类似,就是少了年龄和性别的输入。其他验证与验证码的获取都差不多,就不过多介绍了。

主界面

首先左边是好友列表,列出了所有好友的头像和备注,以及在线状态。好友列表解释个listview,然后每个好友是个pane,在pane里面添加信息,再将pane添加到listview里就实现了添加到好友列表。在这里有个右键菜单,可以实现消息标为未读已读,查看好友资料,清除聊天记录,删除好友等功能。

中间是个发消息的模块,主要也是由listview和一些pane组成。和好友列表类似。一共定义了两种pane,好友消息是左,我的消息是右。这样就实现了一左一右的“添加”消息。在这里“我”发送的消息都会被传到服务端,然后服务端再传给对应的好友。如果好友不在线,就进行离线处理:将“我”发的所有消息以“我的账号+好友账号+消息”存在数据库的一张表offlinemsg中。当该好友上线时,就会出现消息提示,也就是我离线发的消息,好友读取消息后,这些数据就会在数据库中被删除,避免出现重复提醒相同消息。当好友在线时,也会实时提示好友未读的消息。

实现效果大概是这样。当然这里还有好玩的聊天助手哦,那就是图灵机器人,可以实现无限陪聊的功能。

在右边就是我的主页信息了,上面展示我的一些基本信息:我的头像、姓名等,还有一些按钮,可以实现添加好友,查看我的更多资料,最小化、关闭等功能。

好友主页

该页面显示的好友的全部资料信息,这里有个修改备注的按钮,当你点击后,就可以对备注文本框进行编辑,当编辑完成,点击完成按钮,信息就会在数据库中更新,并在好友列表上更新。

我的个人主页

跟好友主页类似,就是增加了一点权限,可以更改所有信息。

添加好友

当你输入账号,然后按回车键时,就会在下面显示对应的好友账号,并可以进行添加。如果账号不存在,或者是已经添加的好友则会报错。

气泡皮肤的实现

把气泡一共分为七个部分来实现(本来是分为九个部分来实现的,但是能力有限,九个部分的难以实现):左上,左中,左下,右上,右中,右下,中间。由于技术有限,把一个完整的气泡皮肤分成了六个部分,分别作为除中间以外的气泡背景,中间的颜色用气泡颜色填充,颜色获取可以用ps的吸管工具。主要是七个部分的完美衔接花了很多时间。

消息提示音的实现

导入了jl1.0.1.jar,实现了java的简单播放mp3文件,在将服务器发来的给好友的消息的同时加上该消息提示音,并在播放完提示音再展示消息,以达到“网络延迟”的效果。

四、个人小结

该项目一共花了我两周多的时间完成的,可以说是比较久了,个人对于最终的结果还是比较满意,期间也遇到了很多问题,出现了很多bug,最终都一个一个的解决了。但是现在的程序还是存在很多待进一步改善的地方,我将会在之后的时间里对它进行进一步完善。

上传的附件 cloud_download 百度云下载链接.txt ( 0.14kb, 4次下载 )
error_outline 下载需要17点积分

发送私信

只有过着不安稳得日子,日子才能不纠结

9
文章数
9
评论数
最近文章
eject