仿QQ聊天工具(JAVA实现)项目总结

闲暇之余基于Java Swing自己写了一个即时聊天软件LL,源码地址:https://github.com/nmyphp/msn532.git。欢迎大家一起改进。

 

一、遇到的异常及解决办法

1.        org.hibernate.HibernateException:Could not parse configuration: /hibernate.cfg.xml

..省略

Caused by: org.dom4j.DocumentException: www.hibernate.orgNested exception: www.hibernate.org

解决办法:这是因为没有联网

2.        hibernate配置联合主键,被联合的各个字段必须加“insert=”false””属性,否则会字段重复插入,导致异常


 
   
   
   

 
   
 
 
   
 

 

二、项目中遇到的难题及解决办法

1.        在好友列表中,怎么使用JList做出类似QQ那样的列表项(既有图片也有文字)

 

解决办法:重写ListCellRenderer类,自己实现JList中的对象的表现效果,否则只能显示字符串,具体如下:

主要是重写getListCellRendererComponent这个方法,你可以在这个类中显示JLabel等其他组件,value就是你加入到JList中的对象。最后用调用JListsetCellRenderer方法设置它的渲染器。

2.        怎么实现在一台电脑上可以登录多个客户端,并且他们之间正常通讯

解决办法:大家肯定知道通过端口号,但是仅仅是在每次创建客户端的时候,port++是不行的。我的解决办法是通过读写文件,每次创建新的客户端的时候就从文件中读取一个端口号,然后port++,再把port++写入文件,以便下一次读到的与这次不同。

3.        怎么实现一个客户端同时打开多个聊天窗口,而且接收消息互不干扰

解决办法:每个聊天窗口再设置一个ID,唯一标示该窗口,然后用一个Map储存这些窗口,key是窗口IDelement是窗口,这样每次接收到消息时,遍历这个Map,找到对应的窗口,将消息传给他。

4.        每个客户端的ip不一样,而且不同时间也可能不一样,比如我在学校,ip是随机分配的,不可能每个客户端储存一份所有其它客户端的ip。怎么实现他们之间的通讯呢?

解决办法:通过服务器转发消息。每次一个客户端登录时,就把自己的ip和端口号发给有固定ip和端口号的服务器,服务器用Map存起来,key是客户端的用户(登录客户端的User)的IDelement是客户端的ip和端口号。这样当有一个用户给另一个用户发消息时,就发给服务器(要表示发给哪一个User),服务器在Map中查找那个客户端的登录信息,然后把消息发给那个客户端。

 

你可能感兴趣的:(JAVA,SE)