import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.Vector;
import java.net.*;
import java.io.*;
class FindFriend2 extends JFrame {//查找好友类
JLabel jLabel1 = new JLabel();
JButton find2 = new JButton();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
JList list2;
///////////////////以下是好友的呢称,性别等信息
Vector nickname=new Vector();
Vector sex=new Vector();
Vector place=new Vector();
Vector jicq=new Vector();
Vector ip=new Vector();
Vector pic=new Vector();
Vector status=new Vector();
Vector emails=new Vector();
Vector infos=new Vector();
//以下临时保存好友的呢称,性别等信息
Vector tmpjicq=new Vector();//jicqid
Vector tmpname=new Vector();//jicqname
Vector tmpip=new Vector();//ip
Vector tmppic=new Vector();//pic info
Vector tmpstatus=new Vector();//status
Vector tmpemail=new Vector();
Vector tmpinfo=new Vector();
//以下创建网络相关变量
Socket socket;
BufferedReader in;
PrintWriter out;
int myid;
String serverhost;
int servport;
DatagramPacket sendPacket;
DatagramSocket sendSocket;
int sendPort=5000;
//////////////////
JPopupMenu findmenu = new JPopupMenu();
JMenuItem look = new JMenuItem();
JMenuItem add = new JMenuItem();
public FindFriend2(int whoami,String host,int port) {//查找好友类构造函数
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
serverhost=host;
servport=port;
myid=whoami;
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}//以下与服务器连接
try{socket=new Socket(InetAddress.getByName(serverhost),servport);
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
sendSocket=new DatagramSocket();
}catch(IOException e1){}
}
private void jbInit() throws Exception {//以下是程序界面
jLabel1.setText("下面是在线的朋友");
jLabel1.setBounds(new Rectangle(11, 11, 211, 18));
this.getContentPane().setLayout(new FlowLayout());
find2.setText("查找");
find2.setBounds(new Rectangle(8, 289, 79, 29));
find2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
find2_mouseClicked(e);
}
});
jButton1.setText("next");
jButton1.setBounds(new Rectangle(110, 288, 79, 29));
jButton2.setText("up");
jButton2.setBounds(new Rectangle(211, 285, 79, 29));
jButton3.setText("cancel");
jButton3.setBounds(new Rectangle(317, 289, 79, 29));
// nickname=new Vector();
// sex=new Vector();
// place=new Vector();
ListModel model=new FindListModel(nickname,sex,place);//列表模型
ListCellRenderer renderer=new FindListCellRenderer();
list2=new JList(model);
list2.setSize(200,200);
list2.setBackground(new Color(255, 255, 210));
list2.setAlignmentX((float) 1.0);
list2.setAlignmentY((float) 1.0);
list2.setCellRenderer(renderer);
list2.setVisibleRowCount(7);
list2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(MouseEvent e) {
list2_mousePressed(e);
}
});
look.setText("查看资料");
add.setText("加为好友");
add.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(MouseEvent e) {
add_mousePressed(e);
}
});
this.getContentPane().add(jLabel1, null);
this.getContentPane().add(new JScrollPane(list2));
this.getContentPane().add(find2, null);
this.getContentPane().add(jButton1, null);
this.getContentPane().add(jButton2, null);
this.getContentPane().add(jButton3, null);
findmenu.add(look);
findmenu.add(add);
}//以下是关闭本窗口
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
//this.dispose();
this.hide();
}
}
//以下向服务器发送查找好友请求
void find2_mouseClicked(MouseEvent e) {
out.println("find");
DefaultListModel mm=(DefaultListModel)list2.getModel();
/////////////////find friend info
try{
String s=" ";
//从服务器读取好友信息
do{ s=in.readLine();
if(s.equals("over")) break;
nickname.add(s);
sex.add(in.readLine());
place.add(in.readLine());
ip.add(in.readLine());
emails.add(in.readLine());
infos.add(in.readLine());
}while(!s.equals("over"));
/////////////end find info
//read their jicqno
int theirjicq,picinfo,sta;
for(int x=0;x<nickname.size();x++){
theirjicq=Integer.parseInt(in.readLine());
//System.out.println(theirjicq);
jicq.add(new Integer(theirjicq));
picinfo=Integer.parseInt(in.readLine());
pic.add(new Integer(picinfo));
sta=Integer.parseInt(in.readLine());
//System.out.println(sta);
status.add(new Integer(sta));
//System.out.println(jicq.get(x));
}
//在列表中显示
for(int i=0;i<nickname.size();i++){
mm.addElement(new Object[]{nickname.get(i),sex.get(i),place.get(i)});
}//for
}catch(IOException e4){System.out.println("false");}
}
//显示查找好友菜单
void list2_mousePressed(MouseEvent e) {
findmenu.show(this,e.getX()+20,e.getY()+50);
}
/////////////add frined
//以下将添加的好友存储在临时矢量
void add_mousePressed(MouseEvent e) {
//add friend to database
int dd;
dd=list2.getSelectedIndex();
tmpjicq.add(jicq.get(dd));
tmpname.add(nickname.get(dd));
tmpip.add(ip.get(dd));
tmppic.add(pic.get(dd));
tmpstatus.add(status.get(dd));
tmpemail.add(emails.get(dd));
tmpinfo.add(infos.get(dd));
//以下向服务器发送添加好友请求
out.println("addfriend");
out.println(jicq.get(dd));
out.println(myid);
try{ //以下告诉客户将其加为好友
String whoips;
String s="oneaddyou"+myid;
s.trim();
System.out.println(s);
byte[] data=s.getBytes();
whoips=ip.get(dd).toString().trim();
sendPacket=new
DatagramPacket(data,s.length(),InetAddress.getByName(whoips),sendPort);
sendSocket.send(sendPacket);
} catch(IOException e2){e2.printStackTrace();}
//}catch(IOException df){};
}
/////////////add friend end
}
//以下扩展DefaultListModel类建立列表
class FindListModel extends DefaultListModel
{ public FindListModel(Vector nickname,Vector sex,Vector place)
{ for(int i=0;i<nickname.size();++i){
addElement(new Object[]{nickname.get(i),sex.get(i),place.get(i)});
}
}
public String getName(Object object)
{ Object[] array=(Object[])object;
return(String) array[0];
}
public String getSex(Object object)
{ Object[] array=(Object[]) object;
return (String) array[1];
}
public String getPlace(Object object)
{ Object[] array=(Object[])object;
return (String) array[2];
}
}
class FindListCellRenderer extends JLabel implements ListCellRenderer//以下是处理列表渲染
{ private Border lineBorder=BorderFactory.createLineBorder(Color.red,2),
emptyBorder =BorderFactory.createEmptyBorder(2,2,2,2);
public FindListCellRenderer(){
setOpaque(true);
}
public Component getListCellRendererComponent(JList list,Object value,int index,
boolean isSelected,boolean cellHasFocus)
{ FindListModel model=(FindListModel) list.getModel();
setText(model.getName(value)+" "+model.getSex(value)+" "+model.getPlace(value));
if(isSelected){setForeground(list.getSelectionForeground());
setBackground(list.getSelectionBackground());
}
else { setForeground(list.getForeground());
setBackground(list.getBackground());}
if(cellHasFocus) setBorder(lineBorder)
【Java毕业设计:基于Java的聊天系统的设计与实现】 在计算机科学领域,毕业设计是学生在学位课程结束时进行的一项重要任务,旨在综合运用所学知识解决实际问题。本项目是一个基于Java的聊天系统,它涵盖了Java编程语言、网络通信、多线程以及数据库等核心知识点,对于学习Java技术栈的学生来说,这是一个很好的实践平台。 1. **Java核心技术** Java是一种跨平台的编程语言,以其“一次编写,到处运行”的特性闻名。在这个聊天系统中,Java的面向对象特性被充分利用,用于构建聊天对象、用户对象等。此外,Java的集合框架、异常处理机制以及IO流等也是实现系统功能的基础。 2. **网络通信** 聊天系统的基石是网络通信,通常采用Socket编程来实现客户端与服务器之间的数据交换。Java的Socket类和ServerSocket类提供了网络通信的基本接口,使得消息能在不同计算机之间实时传输。 3. **多线程** 在聊天系统中,多线程是必不可少的。服务器端需要为每个连接的客户端创建一个独立的线程,以便同时处理多个用户的请求,实现并发聊天。客户端也需要线程来处理接收和发送消息,确保用户界面的响应性。 4. **数据库管理** 用户注册信息、聊天记录等数据通常存储在数据库中。本系统可能使用了如MySQL这样的关系型数据库,通过JDBC(Java Database Connectivity)来与数据库交互,实现数据的增删改查操作。 5. **用户界面** 用户界面是用户与系统交互的窗口,可以使用Java Swing或JavaFX库来构建图形用户界面(GUI)。这些库提供了丰富的组件,如文本框、按钮、聊天窗口等,使得用户可以方便地输入和查看消息。 6. **消息序列化与反序列化** 为了在网络上传输,消息需要被序列化成字节流。Java的Serializable接口可以实现对象的序列化,而反序列化则将字节流还原为可操作的对象。 7. **安全性** 对于任何涉及用户信息的系统,安全性都是重要的一环。可能涉及到的包括数据加密、防止SQL注入等措施。 8. **并发控制** 为了确保多用户访问时的数据一致性,系统可能采用了锁、信号量等并发控制机制。 9. **错误处理** 异常处理是程序健壮性的重要保障,Java的try-catch-finally结构用于捕获并处理可能出现的错误。 10. **性能优化** 聊天系统的性能优化可能包括减少网络延迟、提高数据库查询效率等。例如,合理设计数据库索引,使用缓存策略等。 提供的文件中,“论文.doc”可能详细介绍了该系统的设计思想、实现方法和技术难点;“picture”文件夹可能包含系统界面截图和架构图;“说明文档(必读)”可能包含了使用系统和部署的指南;“源代码”则是整个系统的实现部分,可以通过阅读理解整个系统的具体运作方式。 这个基于Java的聊天系统毕业设计是一个全面的Java应用开发案例,涵盖了从需求分析到系统测试的全过程,对于提升Java编程技能和理解软件工程流程具有很大帮助。













































- 1


- 粉丝: 6659
- 资源: 9万+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 三菱FX3U与欧姆龙E5CC温控器基于Modbus RTU的远程+本地通讯控制系统设计
- 工业自动化领域WinCC报表功能详解:日报表、月报表、年报表与自由时段报表的应用与实现
- MATLAB/Simulink仿真:交直流微电网中光伏、蓄电池、风机的并离网切换与虚拟同步发电机技术
- 西门子SMART200 PLC与电子天平自由口通讯程序详解及实战案例
- 西门子1200 PLC V15版多设备协同控制:步进电机、变频器与TCP/IP通讯应用实例
- QT(C++)权限管理平台源码解析:涵盖用户、角色、权限、菜单、日志管理等功能
- 西门子PLC浆料输送搅拌系统:模拟量控制与梯形图编程详解
- LabVIEW实现485标准Modbus通信的变频器测控系统及其应用
- 自动化控制领域:西门子200SMART PLC+三菱变频器+威纶通触摸屏的液体配料合成设备程序详解
- LS-DYNA霍普金森压杆SHPB动态劈裂仿真k文件详解及优化技巧
- 信号处理领域中小波降噪、小波包降噪与滤波降噪的Python实现及应用场景
- 西门子PLC模拟量滤波程序:适用于1200与1500系列的多功能信号处理功能块
- 纯电动车续驶里程的Simulink建模:基于PI控制的工况跟随与二阶RC电池模型
- 基于多种策略改进的黏菌优化算法SMA:实现快速收敛与高精度优化
- 基于二阶RC模型的磷酸铁锂电池参数在线辨识及其Matlab实现
- 西门子PLC200smart RS485轮询与步进轴控制在产品测试机中的应用



- 1
- 2
前往页