




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MiniQQ,tian_jx,UsingJava设计文档可视化多方通信好友维护聊天记录开发文档、总结报告,登录窗口注册窗口好友列表聊天窗口查找/添加好友聊天记录对话框(登录失败、注册成功、注册失败确认删除、错误提示等),登录窗口,注册,查找好友,好友列表,查找结果,聊天窗口,聊天记录,PackagesServer登录验证注册服务好友维护聊天组维护在线用户维护消息转发异常处理.,Client各个窗口好友维护聊天记录维护活动窗口维护异常处理.,Multi-ThreadSocket-ServerSocketI/OStreamJDBC(FilesR/W),创建Thread的子类,并覆盖run()方法实现Runnable接口,publicclassChatServerArrayListclients=newArrayList();publicstaticvoidmain(Stringargs)newChatServer().begin();publicvoidbegin()ss=newServerSocket(8888);Sockets=ss.accept();Clientc=newClient(s);newThread(c).start();clients.add(c);,classClientimplementsRunnable/ChatServer内部类privateSockets;privateDataInputStreamdis=null;privateDataOutputStreamdos=null;publicClient(Sockets)this.s=s;dis=newDataInputStream(s.getInputStream();dos=newDataOutputStream(s.getOutputStream();publicvoidsend(Stringstr)dos.writeUTF(str);publicvoidrun()Stringstr=dis.readUTF();for(inti=0;iSHOWDATABASES;2:创建一个数据库MYSQLDATAmysqlCREATEDATABASEMYSQLDATA;3:选择你所创建的数据库mysqlUSEMYSQLDATA;(按回车键出现Databasechanged时说明操作成功!)4:查看现在的数据库中存在什么表mysqlSHOWTABLES;5:创建一个数据库表mysqlCREATETABLEMYTABLE(nameVARCHAR(20),sexCHAR(1);6:显示表的结构:mysqlDESCRIBEMYTABLE;,7:往表中加入记录mysqlinsertintoMYTABLEvalues(hyq,M);8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)mysqlLOADDATALOCALINFILED:/mysql.txtINTOTABLEMYTABLE;9:导入.sql文件命令(例如D:/mysql.sql)mysqlusedatabase;mysqlsourced:/mysql.sql;10:删除表mysqldropTABLEMYTABLE;11:清空表mysqldeletefromMYTABLE;12:更新表中数据mysqlupdateMYTABLEsetsex=fwherename=hyq;,MySQL-frontNavicatSQLyogmysql-workbench,userIDnamepasswordregDate.,friendshipIDuser_IDfriend_IDtypefrdDate.,recordIDuser_IDfriend_IDotherinfo.,LoginfriendListfriendManagementchatWindowgroupManagementchatRecord,Login.java,btnLogin.addActionListener(newActionListener()publicvoidactionPerformed(ActionEvente)booleanchecked=server.verify(this.getuser(),this.password();/登录验证if(checked)newfriendsWindow();loginFrame.setVisible(false);/loginFrame.dispose();else.);,listFriend()/server.java,Statements=conn.createStatement();ResultSetrs=s.executeQuery(,friendship.type+fromuser,friendship+whereuser.ID=friendship.friend_ID+ANDfriendship.user_ID=+this.getUserID()+);while(rs.next()inttype=rs.getInt(type);swith(type)case0:/friendNode.add(current);case1:/strangeNode.add(current);default:/blacklistNode.add(current);,每一个chatWindow对应一个线程所有chatWindow按照组进行分类,并且由server负责维护讨论组每个讨论组里面都应该有一个数据结构(list)维护组里的窗口,服务器收发消息时向数据库中插入聊天记录,或者本地维护另一个数据库,在本地插入聊天记录采用文本文件保存聊天记录时,可以以对方用户名/ID为文件名分别保存不同对象的聊天记录,privateBufferedReaderinputStream=null;privateBufferedWriteroutputStream=null;privateStringBuildersb=newStringBuilder();privateStringfile;privateintline=0;/numberzeroprivatestaticSimpleDateFormats=newSimpleDateFormat(yyyy-MM-dd);/格式化日期使用,publicclassFileManagerpublicFileManager(StringuserID,StringfriendID)checkExsit(userID,friendID);run();privatevoidcheckExsit(StringuserID,StringfriendID)/*检查用户聊天记录文件夹路径存在否,*userID为当前用户,friendID为好友*/Filef=newFile(System.getProperties().getProperty(user.dir)+chatLog/+userID);if(!f.exists()f.mkdirs();file=f.getAbsolutePath()+/+friendID+.txt;f=newFile(file);if(!f.exists()/*检查聊天记录文件有无*/tryf.createNewFile();catch(IOExceptione)e.printStackTrace();,publicvoidrun()tryinputStream=newBufferedReader(newFileReader(file);Stringl;while(l=inputStream.readLine()!=null)line+;sb.append(l+System.getProperty(line.separator);catch(FileNotFoundExceptione)e.printStackTrace();catch(IOExceptione)e.printStackTrace();finallyif(inputStream!=null)tryinputStream.close();catch(IOExceptione)e.printStackTrace();,/获取当前日期.格式为2009-02-02privatestaticStringgetDate()Datedate=newDate();return+s.format(date)+;/清除记录publicvoidremoveMsg()line=0;sb.delete(0,getString().length();,/保存聊天记录.publicvoidsave(Stringmsg)StringnewMsg=msg;/加入当前日期.if(msg.trim().length()!=0)newMsg=getDate()+System.getProperty(line.separator)+-+System.getProperty(line.separator)+newMsg;sb.append(System.getProperty(line.separator)+newMsg);tryoutputStream=newBufferedWriter(newFileWriter(file);outputStream.write(sb.toString();catch(IOExceptione)e.printStackTrace();finallytryoutputStream.close();catch(IOExceptione)e.printStackTrace();,/获取记录内容publicStringgetString()returnsb.toString();/获取行数publicintgetLines()returnline;,privateJTreetree;privateTreeNodenode;privateDefaultTreeModelmodel;privateDefaultTreeCellRendererrenderer;model=newDefaultTreeModel(node);tree=newJTree(model);renderer=newDefaultTreeCellRenderer();renderer.setLeafIcon(newImageIcon(a.jpg);/叶子结点图片renderer.setClosedIcon(newImageIcon(b.jpg);/关闭树后显示的图片renderer.setOpenIcon(newImageIcon(c.jpg);/打开树时显示的图片tree.setCellRenderer(renderer);,头像显示,publicclassTreePopupMenuextendsJFrameimplementsMouseListener,ActionListenerprivatestaticfinallongserialVersionUID=1L;JTreetree;JPopupMenupopMenu;JMenuItemaddItem;JMenuItemdelItem;JMenuItemeditItem;publicTreePopupMenu()/JTree构造/Stringmodel=我的好友,陌生人,黑名单;/tree=newJTree(model);tree=newJTree();tree.setEditable(true);tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);tree.addMouseListener(this);,JTree右键菜单,tree.setCellEditor(newDefaultTreeCellEditor(tree,newDefaultTreeCellRenderer();setSize(200,800);popMenu=newJPopupMenu();addItem=newJMenuItem(加入黑名单);addItem.addActionListener(this);delItem=newJMenuItem(删除好友);delItem.addActionListener(this);editItem=newJMenuItem(修改备注);editItem.addActionListener(this);popMenu.add(addItem);popMenu.add(delItem);popMenu.add(editItem);getContentPane().add(newJScrollPane(tree);publicvoidmouseClicked(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmouseExited(MouseEvente),publicvoidmousePressed(MouseEvente)TreePathpath=tree.getPathForLocation(e.getX(),e.getY();if(path=null)return;tree.setSelectionPath(path);if(e.getButton()=3)popMenu.show(tree,e.getX(),e.getY();publicvoidmouseReleased(MouseEvente)public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- BIM技术在地下工程设计中的成功案例
- 彩妆初夏法则 追寻夏日的璀璨
- 兔年吉祥物小故事
- 2025年休闲食品健康化转型与节日市场拓展的促销活动分析报告
- 环境灾害应急响应预案培训师资重点基础知识点归纳
- 希沃课件教学感受
- 2024-2025学年度黑龙江省哈尔滨市第七十三中学校高一第二学期期中考试历史试题(含答案)
- 秋冬换季新潮眼妆
- 炸鸡店的餐饮服务与用餐环境
- 护理实践中的沟通与协作
- 2025春季学期国家安全教育期末考试-国开(XJ)-参考资料
- 2025公需课《人工智能赋能制造业高质量发展》试题及答案
- 2024-2025学年人教版四年级数学下学期期末试卷(含答案)
- 2025年安全生产月主题培训课件:如何查找身边安全隐患
- 涉及民族因素矛盾纠纷突发事件应急预案
- 2024年重庆市高考物理试卷(含答案解析)
- JBT 1306-2024 电动单梁起重机(正式版)
- 高中必备古诗文75篇高中古诗大全必背
- 声门下吸引技术ppt课件
- 法律英语单词分单元汇总
- 型录设计(课堂PPT)
评论
0/150
提交评论