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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库建表语句的使用及简单实战教程_SQL数据库建立一个表

    数据库建表语句的使用及简单实战教程_SQL数据库建立一个表目录介绍需求思路思路1:一张表来表示所有数据(如下图)思路2:两张表,学生表和班级表(如下图)代码扩展1.数据库设计三范式1.数据库表中不能出现重复记录,每个字段是原子性的不能再分(不可重复,不可再分)2.第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖3.建立在第二范式基础上的,非主键字段不能传递依赖于主键字段。(不要产生传递依赖)2.经典的数据库设计框架–er图介绍本文将用一个简单的tip来简单介绍建表语句,可以作为建表语句的模板使用需求采集一个学校中学生

    2022年9月8日
    3
  • cholesky分解_java toarray方法

    cholesky分解_java toarray方法接着LU分解继续往下,就会发展出很多相关但是并不完全一样的矩阵分解,最后对于对称正定矩阵,我们则可以给出非常有用的cholesky分解。这些分解的来源就在于矩阵本身存在的特殊的结构。对于矩阵A,如果没有任何的特殊结构,那么可以给出A=L*U分解,其中L是下三角矩阵且对角线全部为1,U是上三角矩阵但是对角线的值任意,将U正规化成对角线为1的矩阵,产生分解A=L*D*U,D为对角矩阵。如果A为对…

    2025年8月5日
    2
  • js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结

    js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结写在前面写前端的时候,很多的时候是避免不了注册这一关的,但是一般的注册是没有任何的难度的,无非就是一些简单的获取用户输入的数据,然后进行简单的校验以后调用接口,将数据发送到后端,完成一个简单的注册的流程,那么一般来说,密码是不做加密的。但是也有一些数据库里面存放的是加密后的密码,这样有一个比较安全的地方在于,即使黑客将用户输入的文本密码得到了,也不知道具体是什么,因为密码是经过加密的。今天就简单的…

    2022年7月11日
    33
  • Android4.0 input事件输入流程详解(中间层到应用层)

    Android4.0 input事件输入流程详解(中间层到应用层)在Android系统中,类似于键盘按键、触摸屏等事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序进行处理。系统启动时,窗口管理服务也会启动,该服务启动过程中,会通过系统输入管理器InputManager来负责监控键盘消息。当某一个Activity激活时,会在该Service下注册一个接收消息的通道,表明可以处理具体的消息,然后当有消息时,InputM

    2022年5月29日
    39
  • Android ListView几种Adapter用法简介「建议收藏」

    Android ListView几种Adapter用法简介「建议收藏」ArrayAdapter适合非常简单的数据显示,很方便,很简单。SimpleAdapter可以自定义Item布局,用于显示交简单的布局及控件,但布局内的控件如按钮等无法获取到焦点,当然也就无法获取到他们的点击事件。SimpleCursorAdapter与SimpleAdapter相似,只是他的数据源是Cursor类型而已。BaseAdpter子类最常用的ListView数据适配器,通过继承BaseAdpter可以较灵活的实现数据的绑定,同时通过使用View

    2022年7月22日
    9
  • 手机修改ntp服务器地址,手机修改ntp服务器ip地址

    手机修改ntp服务器地址,手机修改ntp服务器ip地址手机修改ntp服务器ip地址内容精选换一换本文介绍使用云手机服务时需要了解的基本概念。云手机是一台包含原生安卓操作系统,具有虚拟手机功能的云服务器,简单来说,云手机=云服务器+AndroidOS。您可以远程实时控制云手机,实现安卓APP的云端运行;也可以基于云手机的基础算力,高效搭建应用,如云游戏、移动办公、直播互娱等场景。服务器是用来提供云手机的物理服务器。云手机目前以服务器您可以直接修改虚…

    2022年5月26日
    43

发表回复

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

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