仿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””属性,否则会字段重复插入,导致异常

<class name="AddFriend"table="msn_addfriend" catalog="newmsn">
  <composite-id>
    <key-propertyname="requestSenderId"></key-property>
    <key-propertyname="requestReceiverId"></key-property>
   </composite-id>
  <propertyname="requestSenderId" type="java.lang.Integer"insert="false">
    <columnname="requestSenderID"></column>
  </property>
  <propertyname="requestReceiverId" type="java.lang.Integer" insert="false">
    <columnname="requestReceiverID"></column>
  </property>
</class>

 

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

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中查找那个客户端的登录信息,然后把消息发给那个客户端。

 

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值