仿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
来源:CSDN
作者:YTHIHIA
链接:https://blog.csdn.net/weixin_42947881/article/details/104199753