铭记逻辑错误

  大概是花了4个小时吧,也许是更多时间,就是因为一个小小的逻辑错误,一个比较容易忽略的逻辑错误!!!

好了,看题目吧,做了一个基于Tcp协议的聊天软件(Java),最近想把图片封装发送,实现双方交互,显示图片,把图片转换成byte[]二进制处理,由于在发送时可能是多个图片所以用了一个Vector<buff[]> imageVector=new Vector<buff[]>()的,这里因为用到多线程的处理双方信息交互,同时又要求同步安全,Vector正好满足要求,于是乎,放开手一路coding下去,然后run,编译链接通过,可是添加发送图片时,只在发送者的聊天框里显示图片,无奈就是不再对方的聊天框中显示,什么原因呢??

message.setObj(imageVector)没有执行吗???不可能,因为发送方的图片是messge.getObj(imageVector)得到的,可是什么地方没有执行呢??然后是Debug进行调试,显示transImageVecotr=messge.getObj(imageVector)得到的size是0,这下彻底晕了。封装后全部是空了??? 这也太不可思议了。。。。然后找到Message封装类中Vector的封装

  

public void setImageVector(Vector<byte[]> imageVector){
        System.out.println("在ChatMessage中封装的过程情况测试:是空吗??"+imageVector.size());
        for(int i=0;i<imageVector.size();i++){
            System.out.println("先遍历一下Vector看是否存在元素,各元素值??"+imageVector.get(i));
        }
        this.imageVector=imageVector;
        System.out.println("Vector赋值成功了吗?看其大小!!"+this.imageVector.size());
    }
    public  Vector<byte[]> getImageVector(){
        System.out.println("Vrctor可以获得图片吗?"+imageVector.size());
        return imageVector;
    }

决定看看控制台里到底输出什么?在发送者里的信息中发现imageVector都有值,可是在接收端的imageVector里发现仍是空,趴下了!!!!两个用的是一个同一个message为什么一个非空,一个是空呢???? 难道是Tcp协议的问题,多线程非安全性问题,不对啊,Java API 说了,Vector俺提供线程安全,协议只会发送不会需改信息啊!还是自己的错吧,最后

 

    一直让我蛋疼了几个小时的错误写法:

    System.out.println("Message打包前图片个数:"+chatMess.getImageVector().size());

    ChatView.this.addMessage(chatMess, true);             //执行过这里后chatMess将清空
            QQMessage message = new QQMessage();
            message.setObj(chatMess);
            message.setType(30);
            System.out.println("Message打包后图片个数:"+chatMess.getImageVector().size());
            System.out.println("WriteMessage前图片个数:"+((ChatMessage)message.getObj()).getImageVector().size());
            WriteMessage(message);
            System.out.println("WriteMessage后图片个数:"+((ChatMessage)message.getObj()).getImageVector().size());


    改正后的结果:

    System.out.println("Message打包前图片个数:"+chatMess.getImageVector().size());
            QQMessage message = new QQMessage();
            message.setObj(chatMess);
            message.setType(30);
            System.out.println("Message打包后图片个数:"+chatMess.getImageVector().size());
            System.out.println("WriteMessage前图片个数:"+((ChatMessage)message.getObj()).getImageVector().size());
            WriteMessage(message);
            ChatView.this.addMessage(chatMess, true);              //执行过这里后chatMess将清空
            System.out.println("WriteMessage后图片个数:"+((ChatMessage)message.getObj()).getImageVector().size());

到这里错误显而易见了,就是自己书写的错误,这里程序单个类大概达到了一千多行了,或许是程序太长了造成的自己逻辑混乱,更多的原因是自己代码能力的不过关!!!

这里只是一个经验,时间和精力换来的,害得我晚上睡都没睡好!!!                        2011/11/20               

posted @ 2011-11-20 14:21  java_li  阅读(166)  评论(0编辑  收藏  举报