public class messagePacket implements Serializable {
private int messageType;// 消息类型,1登录验证 ,2出牌信息;3.聊天消息;
private userPacket mUser;// 对象消息内容,包括用户信息对象,
private String mChat;// 聊天消息;
private cardPacket mCard;
}这个消息包,我通过TCP中ObjectInputStream和ObjectOutputStream传送,为什么读取readerObject的时候,界面会卡住啊?在服务器和客户端new ObjectInputStream()和new ObjectOutputStream()的顺序有些对啊,还有就是这个消息包里的每个对象userPacket、cardPacket都序列化过。哎   只要我把客户端或服务器的 m = (messagePacket) in.readObject();给注释掉,就不会卡,不知道为什么?????求解各位大虾,help小弟

解决方案 »

  1.   

    可能是调用ObjectInputStream后没有关闭对象的缘故,楼主试试给对象加上close()方法
      

  2.   

    因为你在事件分发线程中调用会阻塞的方法,而且你从网络反序列化,更是耗时的操作 ,会阻塞的方法不能直接在Swing线程中调用,要不就卡界面了,要在事件分发线程中调用,则要另建一个新线程去执行readObject 读你要的对象 原则就是把耗时操作让普通线程做,而Swing相关组件更新得要EDT线程做(见SwingUtilites.invokeLater/ invokeAndWait用法)
    SwingUtilites.isEventDispatchTread 判断当前线程是否事件分发线程  
      

  3.   

    现在的问题是  我在里面写了个线程类包含GUI组件里JTextArea,在run方法里更新文本setText内容,怎么不能用啊