复习Java第二个项目仿QQ聊天系统 06(发送接收消息功能完善) &Java面试题HashMap的put方法实现原理&生活【记录一个咸鱼大学生三个月的奋进生活】028

本文详述了使用Java实现QQ聊天系统中发送和接收消息功能的完善过程,包括UdpThread接收线程、MainFrame的双击发送、SendFrame及ReceiveFrame的逻辑。同时探讨了HashMap的put方法实现原理,为面试做准备。还分享了一张摄影作品。
摘要由CSDN通过智能技术生成

复习Java(仿QQ聊天系统06发送接收消息功能完善)

  今天我们来完善发送消息界面和接收消息界面的功能,之前静态页面在这个文章中已经介绍过了:复习Java第二个项目仿QQ聊天系统 01(界面部分),今天我们来写发送和接收消息功能的实现

UdpThread类(接收信息、以防阻塞)

  这个类会在MainFrame中使用,当接收到信息时就触发,可以处理消息接收,还是个线程以防阻塞

package com.qq.listener;

// 以防阻塞的UdpThread,这个类同时有三个作用,1:是个线程可以处理多个消息发送,2:用观察者模式实现事件,3:还通过UdpSocket实现发送消息

import com.qq.pub.UdpSocket;

public class UdpThread extends Thread {
   
	
	private UdpSocket udpSocket = null;
	private UdpListener l = null;
	
	
	// 重写构造方法将udpSocket作为参数传入
	public UdpThread() {
   
		// TODO Auto-generated constructor stub
	}
	public UdpThread(UdpSocket udpSocket) {
   
		this.udpSocket = udpSocket;
	}
	
	
	// addUdpListener方法获得事件处理l,当有好友登录就会实例化udpSocket传输信息然后就会触发
	public void addUdpListener(UdpListener l) {
   
		this.l = l;
	}
	
	
	// 重写线程的run方法
	@Override
	public void run() {
   
		while(true) {
   
			String udpInfo = this.udpSocket.receive();          // 获得udpSocket接收到的信息
			this.l.exectue(udpInfo);                            // 并将接收到的信息作为参数传给事件处理的l
		} 
	}
}

MainFrame主页面中 双击好友发送消息的代码

  然后回顾一下昨天在MainFrame主页面中写到过的怎么双击好友发送消息的代码,来看下实例化SendFrame(发送框)时都传入了什么参数

// 当左键双击好友时就实例化发送消息的窗体,这后面都是MouseListener接口的实现方法,我们只用的上这个点击事件,所以只重写这个方法
	@Override
	public void mouseClicked(MouseEvent e) {
   
		if(1 == e.getButton() && 2 == e.getClickCount()) {
   
			Qquser receiver = this.friendList.getSelectedValue();
			SendFrame sendFrame = new SendFrame(this.fullUser, receiver);
			sendFrame.setVisible(true);
		}
	}

  可以看到我们在发送消息时传入了发送者对象的信息和接收好友的对象的信息

SendFrame发送消息框功能完善

  这个类中要注意,当你发送消息时发出去的其实是一个报文,报文头为MESSAGE标记,然后是发送者的用户名和发送的消息,这都是会在接收信息时用到的

package com.qq.ui;

// 发送消息的页面

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import com.qq.bean.Qquser;
import com.qq.pub.CommonUse;
import com.qq.pub.UdpSocket;

public class SendFrame extends JFrame implements ActionListener {
   
	private Qquser sender = null;
	private Qquser receiver = null;
	
	private JPanel topPanel;
    private JPanel bottomPanel;
    
    private JLabel receiverLabel = null;
   	private JTextField receiverField = null;<
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MyQQ使用说明书 配置源程序 附加数据库SQL Server 2000 (1)将TM\05\MyQQ\MyQQServer\MyQQServer\DataBase文件夹中的扩展名为db_MyQQData_Data.MDF和db_MyQQData_Log.LDF的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项。 (3)将弹出“附加数据库”对话框,在该对话框中单击【 】按钮,选择所要附加数据库的db_MyQQData_Data.MDF文件,单击【确定】按钮,即可完成数据库的附加操作。 使用说明 系统介绍 根据企业对QQ系统的要求,本系统可以实现以下目标:  操作简单方便、界面简洁美观。  每个客户端只能注册一次。  可以在局域网中实现文字及大图片的传输。  可以实现局域网视频。  可以实现多用户的信息通信。  系统运行稳定、安全可靠。 操作注意事项 (1)在一台计算机中,不可以登录两个或两个以上的用户。 (2)在进行视频前,客户端和远程客户端必须打开通信窗口。 (3)在发送大图片的时候,传送的速度较慢。 (4)当用户第一次运行客户端程序时,将会弹出注册窗口进行注册,用户注册后,再次运行客户端程序时,将直接进行登录,无须注册。 操作流程 (1)用户首先启动服务器端,如图1.1所示。单击“控制台”/“开始服务”命令,启动服务器端的UDP协议。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aspiriln

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值