java实现仿QQ即时聊天[通俗易懂]

java实现仿QQ即时聊天[通俗易懂]这是我的java大作业,这里就直接贴上我的实验报告了。1.1项目介绍这是一个模仿QQ的即时聊天软件,可以通过运行在本地的服务端,实现两个客服端之间的通信,即聊天。采用的是javafx架构作为GUI设计架构,个人认为优点是可以自己设计css,使界面达到美观的目的。本项目共有登录、注册、重置密码、主界面发消息、添加好友、好友列表项、查看聊天记录、删除聊天记录、未读消息提醒、好友主页、我的主页等模块…

大家好,又见面了,我是你们的朋友全栈君。

这是我的java大作业,这里就直接贴上我的实验报告了。

2.0版已更新地址:Java仿QQ2.0版
项目已开源:github地址:imitate-qq 欢迎fork与star

仿微信Appcanary_chat

个人开源项目canary 欢迎您的使用

1.1项目介绍
这是一个模仿QQ的即时聊天软件,可以通过运行在本地的服务端,实现两个客服端之间的通信,即聊天。采用的是javafx架构作为GUI设计架构,个人认为优点是可以自己设计css,使界面达到美观的目的。本项目共有登录、注册、重置密码、主界面发消息、添加好友、好友列表项、查看聊天记录、删除聊天记录、未读消息提醒、好友主页、我的主页等模块。该项目还调用了短信验证码的api和图灵机器人的api。在进行注册和重置密码时,都会有发送验证码的按钮,通过输入的手机号接收验证码。每个人的账号都会有个聊天助手,聊天助手就是接入的图灵机器人,可实现自动智能回复。
二、系统分析与设计
2.1本程序需解决的关键技术问题
1、短信验证码和图灵机器人的api调用。
2、两个客户端通过服务端实现通信。
3、好友列表项的实现。把新加的好友直接添加到好友列表。
4、聊天记录的实现,两方发的消息一左一右的显示。
5、两个好友之间发消息的气泡的大小自动调整。
6、记住密码和自动登录的复选框的DIY设计
7、实现编辑我的资料时不跳转页面,即在我的主页直接进行编辑
8、实现我的信息数据在多个页面之间的调用。
2.2功能模块

三、项目设计与实现
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中。当该好友上线时,就会出现消息提示,也就是我离线发的消息,好友读取消息后,这些数据就会在数据库中被删除,避免出现重复提醒相同消息。当好友在线时,也会实时提示好友未读的消息。实现效果大概是这样。当然这里还有好玩的聊天助手哦,那就是图灵机器人,可以实现无限陪聊的功能。
在右边就是我的主页信息了,上面展示我的一些基本信息:我的头像、姓名等,还有一些按钮,可以实现添加好友,查看我的更多资料,最小化、关闭等功能。

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

在这里插入图片描述
⑥我的个人主页:跟好友主页类似,就是增加了一点权限,可以更改所有信息。

在这里插入图片描述
⑦添加好友:当你输入账号,然后按回车键时,就会在下面显示对应的好友账号,并可以进行添加。如果账号不存在,或者是已经添加的好友则会报错。
*在这里插入图片描述*
四、个人小结
该项目一共花了我两周多的时间完成的,可以说是比较久了,个人对于最终的结果还是比较满意,期间也遇到了很多问题,出现了很多bug,最终都一个一个的解决了。但是现在的程序还是存在很多待进一步改善的地方,我将会在之后的时间里对它进行进一步完善。

chat客户端下载地址:https://download.csdn.net/download/qq_40663357/10888120
cheServer服务端下载地址:https://download.csdn.net/download/qq_40663357/10888123
欢迎访问我的博客网站:http://jie12366.xyz:8081

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146517.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 人工智能大作业—-八数码问题

    人工智能大作业—-八数码问题基于搜索策略的八数码问题求解大作业题目:基于搜索策略的八数码问题求解大作业目的:加深对搜索策略的理解,尤其是对启发式搜索的基本原理的理解,使学生能够通过编程实现图搜索的基本方法和启发式搜索算法,并能够解决一些应用问题。大作业要求:使用盲目搜索中的宽度优先搜索算法或者使用启发式搜索中的全局择优搜索或A*算法。每人提交一份大作业报告,该报告包括设计、实现、测试、实验对比结…

    2022年7月12日
    41
  • java 遍历map集合_Java遍历Map对象的四种方式

    关于java中遍历map具体哪四种方式,请看下文详解吧。方式一:这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。Mapmap=newHashMap();for(Map.Entryentry:map.entrySet()){System.out.println(“Key=”+entry.getKey()+”,Value=”+entry.g…

    2022年4月7日
    38
  • linuxchmod用法_chmod 指定用户

    linuxchmod用法_chmod 指定用户chmod—-改变一个或多个文件的存取模式(mode)chmod[options]modefiles只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以whoopcodepermission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码)。可指定多个mode,以逗号分开。

    2022年10月20日
    0
  • 解决tomcat启动时的中文乱码问题「建议收藏」

    我们第一次下载或者打开Tomcat时可能在控制台会出现中文乱码问题解决办法1.打开你安装Tomcat的所在目录,本文以7.0.92为例。2.打开后选择conf目录。3.将里面的logging.properties文件用编辑器打开,本例子是使用“Notepad++”编辑器打开。4.打开后大约在50行左右找到java.util.logging.ConsoleHandler.enco…

    2022年4月6日
    45
  • Qt多线程实例与connect第五个参数[通俗易懂]

    Qt是一个GUI框架,在GUI程序中,主线程也叫GUI线程,因为它是唯一被允许执行GUI相关操作的线程。对于一些耗时的操作,如果放在主线程中,就是出现界面无法响应的问题。解决方法一:在处理耗时操作中频繁调用QApplication::processEvents()。这个函数告诉Qt去处理那些还没有被处理的各类事件,然后再把控制权返还给调用者。QElapsedTimeret;…

    2022年4月8日
    81

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号