仿QQ聊天软件(JavaFX+云端数据库)

与世无争的帅哥 提交于 2020-02-07 03:59:16

仿QQ聊天软件(JavaFX+云端数据库)

这个项目是这学期(大二上学期学完Java后的期末项目),寒假闲着无聊就整理下发上来供大家学习以及参考啦(因为国内关于JavaFX的各种资料感觉都太浅了,本来就是想着要比Swing好看才用的JavaFX,结果大部分资料整的比Swing还难看,当然也用了一些开源的JavaFX的Jar包),由于自身经验不足以及开发时间有限,若有编写不足请多多包涵。详细的代码放在GitHub上了,若是对您有帮助,欢迎Fork以及Star(Star是收藏的正确姿势哦)。

客户端:https://github.com/YTGhost/Ultimate-Chat

服务端:https://github.com/YTGhost/Ultimate-Chat-Server

项目的介绍我就偷点懒拿交项目时的文档啦,有什么问题的话可以在下面留言。还有由于有涉及到数据库连接以及短信平台的接入,客户端和服务端的某些代码处需要略微修改,我会在客户端和服务端的GitHub仓库里进行说明,像发送验证码的短信平台也是要自己去注册,数据库方面若是想用MySQL等就自己小小修改一下啦。

一、项目简介

​ 该项目是一个仿Tim的桌面即时聊天软件,其服务端架设在阿里云云端服务器上,用户可通过运行客户端来实现与另一个用户的通信。本项目使用javafx架构来设计GUI,使用javafx可以运用CSS进行界面美化。同时使用了Microsoft Azure云计算平台的SQL服务来进行数据储存,这使得本项目基本可以算是一个真正能使用的“Tim”。本项目实现了用户注册(发送手机验证码进行验证)、登录、重置密码(发送手机验证码进行验证)、查看个人信息界面、修改在线状态(实时反馈到好友及个人的界面)、发送好友申请并添加好友(离线或在线都可)、未读消息提醒和未读通知提醒、好友主页查看、好友备注修改、好友列表、好友分组切换、聊天(若对方离线,其登录时也可收到)。

​ 由于开发时间不足,例如群聊和消息记录等部分功能并未来得及完成,若有需要可以自行添加。

二、项目应用技术简介

2.1 Java

​ 使用Java语言作为项目编写的基础,包括面向对象、异常处理、输入输出、多线程和网络连接。

2.2 JavaFX

​ 使用JavaFX进行全局的控制和GUI设计。

2.3 CSS和FXML

​ 使用CSS(层叠样式表)配合FXML(JavaFX的一种XML分支语言)来进行GUI的布局和美化。

2.4 JDBC

​ 使用JDBC来连接云端数据库。

2.5 T-SQL

​ 使用Transact-SQL语言来与Azure SQL云端数据库进行交互。

2.6 Linux基本操作

​ 通过对阿里云ECS云服务的配置,在其上搭建了Ubuntu16.04系统和JRE环境,并在其上运行服务端程序。

2.7 通过HTTP的Get,POST方式提交短信发送请求

​ 接入了短信发送平台,在服务端通过HTTP的Get,POST方式提交短信发送请求

三、外形设计

3.1 登录界面

在这里插入图片描述

3.2 注册界面

在这里插入图片描述

3.3 忘记密码

在这里插入图片描述

3.4 主界面

在这里插入图片描述

3.5 查找用户

在这里插入图片描述

3.6 用户个人界面

在这里插入图片描述

3.7 好友个人界面

在这里插入图片描述

3.8 聊天界面

在这里插入图片描述

四、详细设计

4.1客户端项目结构

在这里插入图片描述

  • jar文件夹中是本项目所用的jar包
  • main文件夹中Main是该项目的启动
  • manager文件夹中Manager是全局的操作类,receiveThread类是客户端的第二个线程,用于实时读取服务端发来的信息。
  • resource文件夹里是本项目中运用的图片和一些缓存
  • utils文件夹中是本项目所运用到的一些工具类
  • view文件夹中controller文件夹是javafx的controller,而fxml中是使用javafx设计的fxml和CSS文件

4.2 服务端项目结构

在这里插入图片描述

  • Jar文件夹中是该项目所用jar包
  • utils文件夹中是该项目所用工具类
  • ChatServer为服务端的主文件
  • ChatThread为服务端多线程的实现

4.3 设计模式

​ 该项目服务端和客户端的实现均采用了工厂模式:
在这里插入图片描述
通过SignFactory类,实现消息传递的接口,使得每一部分的功能被分隔为一个一个的类,不同的分支做不同的事情,然后在SignFactory中聚合,这样不仅便于扩展,也非常符合“开闭原则”(其上为Server端的SignFactory)。

4.4 数据库

在这里插入图片描述
​ 该项目使用Microsoft Azure数据库进行数据储存,这使得该项目脱离了本地局域网。一共制定了三个表:

4.4.1 friendinfo表

在这里插入图片描述
​ 该表用于储存用户的好友,分组和好友的备注

4.4.2 offline_message表

在这里插入图片描述
​ 该表用于储存用户向已经离线的好友发送的信息

4.4.3 userinfo表

在这里插入图片描述
​ 该表用于储存用户的个人信息以及储存接收的离线好友请求。

4.4 消息接收机制

​ 本项目所用消息气泡为Bubble类和继承了Bubble类的Message类,Bubble类为消息气泡的初始化,而Message类则将消息气泡封装起来,便于加入到CircularQueue中,即消息队列中。

​ 在用户离线的时候,向该用户发送的信息被服务端储存到云端数据库中:
在这里插入图片描述
​ 该用户上线的时候,服务端会去offline_message表中寻找是否存在有发给其的离线消息,若有,则发给该用户,消息被用户接收并储存到未读消息队列中,并用Badge对用户进行提醒。

4.5 注册和找回密码机制

​ 该项目使用了手机短信进行注册验证,服务端使用HTTP的Get,POST方式提交短信发送请求,并发送验证码,例如:
在这里插入图片描述
​ 注册时运用CSS来实现动态检测密码是否符合规则,例如:
在这里插入图片描述

4.6好友信息提醒和状态变更

​ 该项目实现了好友信息的气泡提醒,例如:
在这里插入图片描述在这里插入图片描述
​ 这两个Badge都会实时的进行修改,在好友上下线更改状态时,其好友也可动态接收到其状态,并更改其头像相应颜色,例如当好友切换至忙碌状态时,圆环变为红色。当好友离线时,圆环变为灰色且头像变为灰色。当用户上线时,可接收到其好友在其离线时发送的信息

4.7 聊天

​ 该项目实现了实时的在线聊天,文字和图片都可。离线消息也可接收。聊天模式是即阅即焚的。

4.8 服务端部署

在这里插入图片描述
服务端部署在阿里云ECS云服务器上,实现联网。

五、系统手册

由于图片可能无法体现出设计和操作,故随文档附加视频

5.1 登录、注册和找回密码

在这里插入图片描述
在这里插入图片描述

均在此页面,找回密码也可在用户的个人信息中进行:
在这里插入图片描述

5.2 好友分组切换、查看信息和删除

在这里插入图片描述
右击好友即可

5.3个人信息查看、修改状态和登出

在这里插入图片描述
右击即可

5.4查找用户

在这里插入图片描述
输入账号后回车即可查找

六、创新

  • 使用javafx作为框架,并用FXML和CSS进行GUI布局和美化
  • 使用阿里云ECS服务器在Ubuntu16.04上对服务端进行远端部署,使之脱离局域网,让客户端和服务端真正“online”。
  • 使用Microsoft Azure SQL云端数据库进行数据储存
  • 编写了消息队列并使用Badge使聊天信息的接收和好友申请更加美观
  • 接入了短信发送平台,在服务端通过HTTP的Get,POST方式提交短信发送请求
  • 使用bcrypt对用户密码在数据库进行加密
  • 正则表达式配合CSS来进行诸如注册时的数据验证,使之美观而可靠。
  • 使用工厂模式来替代繁琐的if/else

七、总结与评估

​ 通过这次的项目实践,使得我更加深入地了解了Java的程序开发,并尝试使用工厂模式来替代繁琐的if/else,学习了javafx和CSS替代了SWING来进行GUI设计,了解了数据库的基本应用,学习了如何通过HTTP接入平台API。写这个项目让我深切了解到了我们平常所用软件的大致结构逻辑,并根据需要设计了自己的工具类以及在原有的类上进行拓展。这无疑是充满了挑战的,也激发了我编程的热情。

​ 关于该项目实现功能基本达到,但由于测试时间较短,再加上本人的经验不足,可能在某些功能上存在不足,还请多多包涵。项目文件为保证完整故放完整的idea项目文件夹。

八、参考文档

https://github.com/jfoenixadmin/JFoenix

https://docs.oracle.com/javase/8/docs/api/

https://docs.oracle.com/javase/8/javafx/api/toc.htm

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!