仿QQ聊天软件(JavaFX+云端数据库) 您所在的位置:网站首页 qq聊天界面颜色 仿QQ聊天软件(JavaFX+云端数据库)

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

2023-12-18 12:29| 来源: 网络整理| 查看: 265

仿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等就自己小小修改一下啦。

文章目录 仿QQ聊天软件(JavaFX+云端数据库)一、项目简介二、项目应用技术简介2.1 Java2.2 JavaFX2.3 CSS和FXML2.4 JDBC2.5 T-SQL2.6 Linux基本操作2.7 通过HTTP的Get,POST方式提交短信发送请求 三、外形设计3.1 登录界面3.2 注册界面3.3 忘记密码3.4 主界面3.5 查找用户3.6 用户个人界面3.7 好友个人界面3.8 聊天界面 四、详细设计4.1客户端项目结构4.2 服务端项目结构4.3 设计模式4.4 数据库4.4.1 friendinfo表4.4.2 offline_message表4.4.3 userinfo表 4.4 消息接收机制4.5 注册和找回密码机制4.6好友信息提醒和状态变更4.7 聊天4.8 服务端部署 五、系统手册5.1 登录、注册和找回密码5.2 好友分组切换、查看信息和删除5.3个人信息查看、修改状态和登出5.4查找用户 六、创新七、总结与评估八、参考文档

一、项目简介

​ 该项目是一个仿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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有