基于Java实现的简易网络聊天室

Foooooooood

发布日期: 2020-10-13 10:52:41 浏览量: 106
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

第1章 软件设计概要

1.1 需求分析

现阶段,聊天越来越成为人们生活的必须,而作为网络应用之一的聊天工具,也越来越受到人们的欢迎和重视。聊天工具帮助人们突破了时间地理的限制,可以做到即时通讯,被认为是现代交流方式的象征。目前在互联网的基础上,QQ等工具已经非常成熟,而基于局域网的聊天工具有时也是不可替代的。一个操作简单,界面友好,运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。

1.2 项目目的

本系统主要功能是实现网络聊天,可以注册新用户,登录,用户与用户之间可以互相通信,发送文件并能进行简单游戏操作和实现截屏功能。

1.3 项目特点

本系统容量小,运行速度快,该聊天室相对大型网络聊天室来说功能比较简单,界面美观简洁,人性化;注册登录方便,能够满足人们交流需要,能实现基本的聊天传输文件功能;同时,又拥有自己的一些特色,具有截屏功能,操作简单,还带有贪吃蛇小游戏,可以减压娱乐。

1.4 环境需求

  • 硬件环境:任何平台,256内存

  • 软件环境: Windows 10

  • 开发环境:eclipse + MySQL

第2章 界面设计

2.1 登录界面

2.2 注册界面

2.3 贪吃蛇小游戏界面

2.4 聊天室主界面

2.5 截屏

第3章 系统功能模块设计图

第4章 具体模块设计及功能

4.1 登录模块功能

输入用户名与密码,若用户名与密码均正确,则进入聊天室主页面,否则给用户发出错误信息
注册按钮,点击后进入注册页面,可进行用户注册。

4.2 注册模块功能

输入新注册用户名、密码及密码确认,若用户名未存在且密码与密码确认一直,则注册完成且返回用户登录界面;若输入内容不当,在界面中给出错误信息。

4.3 聊天室模块功能

主要内容包括:聊天内容显示面板,聊天内容输入面板,在线用户列表,文件传输信息栏以及清屏、关闭、发送、贪食蛇、截屏按钮。

  • 聊天内容显示面板:显示时间,消息内容,用户信息,每次登陆时自动显示以往聊天记录

  • 聊天内容输入面板:显示用户所输入的内容,自动换行功能,每次发送完毕自动获取焦点

  • 在线用户列表:显示目前在线用户包括用户头像和用户名,以列表形式表现,单击用户可与对方传输消息,双击用户可以进行文件传输,进行文件时,发送方双击目标用户后,目标用户收到是否接受文件询问框,待确定后文件方可传输(在传输过程中用户不可退出聊天)

  • 文件传输信息栏:在没有文件传输是以条状方框显示,在文件传输时,显示传输进度,传输完毕后显示已传输完毕

  • 清屏按钮:点击清空聊天内容显示面板里的内容

  • 关闭按钮:点击直接关闭聊天室

  • 发送按钮:点击进行消息传送

  • 贪吃蛇按钮:点击进入贪吃蛇游戏版面,进行贪吃蛇游戏

  • 截屏按钮:点击进入截屏模式,可进行截屏功能

4.4 贪吃蛇游戏模块功能

在点击贪吃蛇按钮后,进入贪吃蛇游戏,同时背景音乐开始播放。在游戏时,上下左右键控制蛇运动的方向,按 PageUP 或 PageDown 键改变速度,按 Enter 或 S 键重新开始游戏,按 SPACE 键或 P 键暂停游戏,当游戏暂停或失败或强行退出游戏,背景音乐自动停止,重新游戏时背景音乐重新播放。

食物随机生成,用户得分与所走步数和运动速度有关,即:在相同速度下,所走步数越少,得分越多;在所走步数相同时,运动速度越快,得分越多。运动速度由用户自己控制。

4.5 截屏模块功能

点击截屏按钮后,开启截屏功能:

  • 按住鼠标拖动,可选择截屏区域,松开鼠标左键,区域选择完成,鼠标在选择区域内时,按下鼠标左键可拖动改改变选择区域,双击左键截屏完成,所截内容保存在粘贴板中,单击鼠标右键可重新进行区域选择

  • 鼠标在选择区域边框时,在四个顶点和四边中点时可单击左键进行区域大小调整

  • 鼠标在选择区域外部时,单击鼠标右键可退出截屏功能,返回聊天界面

第5章 系统实现及关键代码

5.1 界面的设计

通过搜集素材以及相应ui知识进行界面设计以及灵活运用监听事件。

背景图片

  1. protected void paintComponent(Graphics g) {
  2. Super.paintComponent(g);
  3. g.drawImage(new ImageIcon("images/图片1.png").getImage(), 0, 0, getWidth(), getHeight(), null);
  4. }

设置控件是否透明

  1. textField.setOpaque(false);

设置鼠标在该区域显示状态变化

  1. btnNewButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

设置回车响应

  1. getRootPane().setDefaultButton(btnNewButton);

增加事件监听

  1. btnNewButton_1.addActionListener(new ActionListener() {
  2. public void actionPerformed(ActionEvent e) {
  3. btnNewButton_1.setEnabled(false);
  4. CatResign frame = new CatResign();
  5. frame.setVisible(true);// 显示注册界面
  6. setVisible(false);// 隐藏掉登陆界面
  7. }
  8. });

5.2 登录与注册系统

运用简单数据库连接技术,实现写入与读取。

连接到MySQL

  1. Class.forName("com.mysql.jdbc.Driver");
  2. conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  3. state = conn.createStatement();

从MySQL中读取数据

  1. result = state.executeQuery("SELECT * FROM test WHERE `name` =" + "'" + u_name + "'");

将信息写入到数据库

  1. ptmt = conn.prepareStatement("INSERT INTO test ( name , keyword ) VALUES ( ? , ? )");
  2. ptmt.setString(1, username);
  3. ptmt.setString(2, password);

5.3 聊天室消息与文件发送系统

此系统充分运用了线程技术与socket技术。

作为服务区端不停的从客户端接收信息,对不同类型的请求做出不同的反应

  1. while (true) {
  2. ois = new ObjectInputStream(client.getInputStream());//获取输入流
  3. bean = (CatBean)ois.readObject();// 读取从客户端接收到的catbean信息

向用户发送信息

  1. private void sendMessage(CatBean serverBean) {
  2. Set<String> cbs = onlines.keySet();
  3. Iterator<String> it = cbs.iterator();
  4. // 选中客户
  5. HashSet<String> clients = serverBean.getClients();
  6. while (it.hasNext()) {
  7. String client = it.next();
  8. if (clients.contains(client)) {
  9. Socket c = onlines.get(client).getSocket();
  10. ObjectOutputStream oos;
  11. try {
  12. oos = new ObjectOutputStream(c.getOutputStream());
  13. oos.writeObject(serverBean);
  14. oos.flush();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. }
  20. }

客户端发送信息

正常情况下,建立连接,发送数据。

  1. CatBean clientBean = new CatBean();
  2. clientBean.setType(1);
  3. clientBean.setName(name);
  4. String time = CatUtil.getTimer();
  5. clientBean.setTimer(time);
  6. clientBean.setInfo(info);
  7. HashSet set = new HashSet();
  8. set.addAll(to);
  9. clientBean.setClients(set);
  10. sendMessage(clientBean);

发送文件

打开文件文件选择框。

  1. JFileChooser chooser = new JFileChooser();
  2. chooser.setDialogTitle("选择文件框"); // 标题
  3. chooser.showDialog(getContentPane(), "选择"); // 按钮的名字

获取路径

  1. filePath = chooser.getSelectedFile().getPath();
  2. File file = new File(filePath);

正常状态,建立连接,发送请求

  1. CatBean clientBean = new CatBean();
  2. clientBean.setType(2);// 请求发送文件
  3. clientBean.setSize(new Long(file.length()).intValue());
  4. clientBean.setName(name);
  5. clientBean.setTimer(CatUtil.getTimer());
  6. clientBean.setFileName(file.getName()); // 记录文件的名称
  7. clientBean.setInfo("请求发送文件");

5.4 贪吃蛇系统

同样运用了线程,实现了物体的运动与更新,运用内部类,调用起来更加简单。有Greedsnake类,node类以及SnakeModel类。

绘制游戏界面(包括蛇和食物)

  1. void repaint() {
  2. Graphics g = paintCanvas.getGraphics();
  3. g.drawImage(new ImageIcon("images\\q1.jpg").getImage(), 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT, null);
  4. g.setColor(Color.BLACK);
  5. LinkedList<Node> na = snakeModel.nodeArray;
  6. Iterator<Node> it = na.iterator();
  7. while (it.hasNext()) {
  8. Node n = (Node) it.next();
  9. drawNode(g, n);
  10. }
  11. // 画出食物
  12. g.setColor(Color.RED);
  13. Node n = snakeModel.food;
  14. drawNode(g, n);
  15. updateScore();
  16. }

5.5 截屏系统

公共的处理把当前的图片加入剪帖板的方法。

  1. public void doCopy(final BufferedImage image){
  2. try{
  3. Transferable trans = new Transferable(){ // 内部类
  4. public DataFlavor[] getTransferDataFlavors() {
  5. return new DataFlavor[] { DataFlavor.imageFlavor };
  6. }
  7. public boolean isDataFlavorSupported(DataFlavor flavor) {
  8. return DataFlavor.imageFlavor.equals(flavor);
  9. }
  10. public Object getTransferData(DataFlavor flavor)
  11. throws UnsupportedFlavorException, IOException {
  12. if(isDataFlavorSupported(flavor))
  13. return image;
  14. throw new UnsupportedFlavorException(flavor);
  15. }
  16. };
  17. Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
  18. }catch(Exception exe){
  19. exe.printStackTrace();
  20. }
  21. }

第六章 调试改错

调试bug或许是编程中最枯燥的任务,所以这要求自己在编程的最初就要考虑到可能会出现的问题和相对应的应对措施,这样会给以后的工作减少很多负担;要考虑到用户的不正当操作,提高交互界面的稳定性。

总结

本系统功能虽简单,但在编程过程中学习了很多知识。在注册与登录模块中学习了简单数据库技术;在用户聊天发送信息文件模块中学习了线程技术,网络连接等技术;在界面的设计中,学习了UI,在贪吃蛇模块中学习了物体移动,对线程有了更深刻的了解;在截屏模块中,不仅联系了编程技术,同时也对自己的数学思维有了很大的锻炼。

在测试中,本系统具有便于扩展,便于维护,并具有一定的程序鲁棒性等特点,本系统实现了一些基本功能,如注册、登录、提示音、不同用户之间进行信息和文件传输的功能,也实现了一些外的功能,贪吃蛇小游戏和截屏功能。

上传的附件 cloud_download 基于Java实现的简易网络聊天室.7z ( 25.73mb, 1次下载 )
error_outline 下载需要11点积分

发送私信

一盏灯,一条路,一个你

13
文章数
27
评论数
最近文章
eject