Java设计的聊天窗口:MiniQQ功能详解

需积分: 10 9 下载量 174 浏览量 更新于2024-07-13 收藏 1.32MB PPT 举报
本资源主要涉及Java编程中的一个课程设计项目,名为"聊天窗口-Java课程设计(qq聊天程序)",目标是通过Java技术构建一个类似QQ的聊天应用,包括多个核心功能模块。以下是详细的课程设计内容概述: 1. **平台与工具**: - 使用Java语言进行开发,表明了课程设计的重点在于掌握Java的基础和面向对象编程特性。 - 采用可视化编程,可能涉及到图形用户界面(GUI)的创建,如用Java Swing或JavaFX来设计登录、注册、好友列表和聊天窗口。 2. **关键组件**: - **登录窗口**:负责用户账户的登录验证,可能出现登录失败的提示。 - **注册窗口**:用户新用户的注册过程,包括成功和失败的处理。 - **查找/添加好友**:允许用户搜索和添加其他用户到好友列表。 - **好友列表**:展示已连接的在线好友。 - **聊天窗口**:用于实时的双向聊天交流,可能包含聊天记录管理和显示。 - **聊天记录**:保存和回溯聊天历史,体现了程序对数据持久化的处理。 - **对话框**:除了聊天窗口,还包括错误提示和确认对话框,确保用户交互的友好性。 3. **服务器端模块**: - **Server** 包含以下功能: - **登录验证**:验证用户输入的用户名和密码是否正确。 - **注册服务**:处理新用户注册请求。 - **好友维护**:管理好友关系,如添加、删除好友等。 - **聊天组维护**:支持群聊或多对多的聊天模式。 - **在线用户维护**:跟踪和更新在线用户的连接状态。 - **消息转发**:在必要时转发消息至多个接收者。 - **异常处理**:处理各种可能的运行时错误。 4. **客户端模块**: - **Client** 类实现了Runnable接口,通过多线程支持并发操作: - **窗口管理**:登录、注册、好友列表和聊天窗口的界面展示。 - **好友维护**:与服务器同步好友信息。 - **聊天记录维护**:保存并读取聊天记录。 - **活动窗口维护**:响应用户的交互事件,如发送消息。 - **异常处理**:处理网络连接问题和其他用户交互时可能出现的异常。 5. **核心技术应用**: - **多线程**:通过继承Thread或实现Runnable接口,提高程序性能和响应能力。 - **Socket/ServerSocket**:用于建立客户端与服务器之间的连接,实现数据的收发。 - **I/O流**:包括DataInputStream和DataOutputStream,处理文本数据的输入输出。 - **JDBC(Java Database Connectivity)**:可能用来实现数据库操作,存储用户信息和聊天记录。 - **文件I/O**:如果涉及到本地文件存储,可能使用Java的File或Files类。 这个课程设计项目不仅涵盖了Java基础,还锻炼了学生在实际项目中的多线程编程、网络通信、数据持久化以及用户界面设计等方面的能力。通过完成这个项目,学生们将深入理解Java编程在实际应用中的应用场景,提升他们的编程技能和项目实践经验。
2011-05-14 上传
java 大一课程设计 qq聊天程序socket=new Socket(); textPanel.send.setEnabled(false); thread=new Thread(this); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==save) { savefile.setVisible(true); if(savefile.getFile()!=null) { try{ File file=new File(savefile.getDirectory(),savefile.getFile()); FileWriter tofile=new FileWriter(file); BufferedWriter out=new BufferedWriter(tofile); out.write(textPanel.getWholeText(), 0, textPanel.getWholeText().length()); out.close(); tofile.close(); } catch(IOException e2){} } } else if(e.getSource()==doodle) { thePaint.setVisible(true); } else if(e.getSource()==Disconnect) { if(socket.isConnected()) { try{ ps.writeUTF("QUIT:"); ps.flush(); socket.close();}catch(IOException ee){System.out.println("无法关闭");} } setTitle("用户"+name+"离线"); textPanel.send.setEnabled(false); nameList.removeAll(); nameLable.setText("在线用户: "+"人数: "+(nameList.getItemCount())); } else if(e.getSource()==connect) { try//请求和服务器建立套接字连接 { if(socket.isConnected()){} else { InetAddress address=InetAddress.getLocalHost(); InetSocketAddress socketAddress=new InetSocketAddress(address,8080); socket.connect(socketAddress); reader=new DataInputStream(socket.getInputStream()); ps=new DataOutputStream(socket.getOutputStream()); out=new ObjectOutputStream(socket.getOutputStream()); in=new ObjectInputStream(socket.getInputStream()); ps.writeUTF(name);//开始即传输用户名 ps.flush(); setTitle("用户"+name+"在线"); thread.start(); } }catch(IOException ee){} } else if(e.getSource()==groupChat) { groupMode=true; condition.setText("群 聊\n"); textPanel.send.setEnabled(true); } else if(e.getSource()==privateChat) { groupMode=false; condition.setText("私 聊\n"); textPanel.send.setEnabled(true); } else if(e.getSource()==nameList) { if(!groupMode) { indexName=nameList.getSelectedItem(); condition.setText("私 聊\n与"+nameList.getSelectedItem()+"聊天中\n"); } } else if(e.getSource()==textPanel.send) { if(e.getSource()==textPanel.send) { textPanel.text=textPanel.in.getText(); Font f=textPanel.in.getFont(); textPanel.out.setFont(f); Color c=textPanel.in.getForeground(); textPanel.out.setForeground(c); textPanel.in.setText(""); if(!groupMode) { textPanel.out.append("\n"+"我说:"+textPanel.text+"\n"); } else { textPanel.out.append("\n"); } System.out.println("文本输出~~"); String text=textPanel.text; if(groupMode) { StringBuffer msg=new StringBuffer("MSG:"); msg.append(text); String s=msg.toString(); try{ ps.writeUTF(s); ps.flush();}catch(IOException ee){System.out.println("输出文本错误");} System.out.println("成功输出"); } else { StringBuffer msg=new StringBuffer("MSGTOONE:"); msg.append(indexName+":"+text); String s=msg.toString(); try{ ps.writeUTF(s); ps.flush();}catch(IOException ee){System.out.println("输出文本错误");} System.out.println("成功输出"); } }