黑马程序员技术交流社区

标题: 求助,自己编写聊天工具,报空指针异常。半天没找出在..... [打印本页]

作者: 郭阳    时间: 2012-10-6 14:49
标题: 求助,自己编写聊天工具,报空指针异常。半天没找出在.....
本帖最后由 郭阳 于 2012-10-6 16:12 编辑
  1. import java.net.*;
  2. import java.io.*;
  3. import java.awt.*;
  4. import java.awt.event.*;

  5. class  MyQQ
  6. {
  7.         public static void main(String[] args)  throws Exception
  8.         {
  9.                 MyQQFrame myqq=new MyQQFrame();        
  10.         }
  11. }


  12. class MyQQFrame
  13. {
  14.         MyQQFrame()
  15.         {
  16.                 init();
  17.         }

  18.         private Frame frame;
  19.         private TextArea ta_sender;
  20.         private TextArea ta_receiver;
  21.         private Button button;
  22.         private DatagramSocket ds_sender;

  23.         public void init()
  24.         {
  25.                 frame=new Frame("MyQQ");
  26.                         frame.setVisible(true);
  27.                         frame.setBounds(30,30,500,400);
  28.                         frame.setLayout(new FlowLayout());
  29.                 ta_sender=new TextArea(3,35);
  30.                 ta_receiver=new TextArea(16,60);
  31.                 button=new Button("发送");

  32.                 frame.add(ta_receiver);
  33.                 frame.add(ta_sender);
  34.                 frame.add(button);

  35.                 try
  36.                 {
  37.                         DatagramSocket ds_sender=new DatagramSocket();
  38.                 }
  39.                 catch (Exception e)
  40.                 {
  41.                         e.printStackTrace();
  42.                 }
  43.                
  44.                 setEvent();
  45.                 startReceive();
  46.                
  47.         }
  48.         
  49.         
  50.         
  51.         
  52.         public void startReceive()
  53.         {
  54.                 new Thread(new Runnable(){
  55.                         public void run()
  56.                         {
  57.                                 try
  58.                                 {
  59.                                         DatagramSocket ds=new DatagramSocket(6777);
  60.                                         while(true)
  61.                                         {
  62.                                         byte[] buf=new byte[1024];
  63.                                         DatagramPacket dp=new DatagramPacket(buf,buf.length);
  64.                                         ds.receive(dp);
  65.                                         String ip=dp.getAddress().getHostAddress();
  66.                                         String data=new String(dp.getData(),0,dp.getLength());
  67.                                         ta_receiver.append(ip+"\r\n\t"+data+"\r\n");
  68.                                         }
  69.                                 }
  70.                                 catch (Exception e)
  71.                                 {
  72.                                         //System.out.println(e.toString());//把接受异常屏蔽,说明是发送出的问题
  73.                                 }
  74.                         }
  75.                 }).start();
  76.         }




  77.         public void setEvent()
  78.         {
  79.                
  80.                
  81.                
  82.                 button.addActionListener(new ActionListener()
  83.                 {
  84.                         public void actionPerformed(ActionEvent e)
  85.                         {
  86.                                 try
  87.                                 {
  88.                                         byte[] buf=ta_sender.getText().getBytes();
  89.                                         DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.3"),6777);
  90.                                         ds_sender.send(dp);
  91.                                        
  92.                                 }
  93.                                 catch (Exception ex)
  94.                                 {
  95.                                         System.out.println(ex.toString());
  96.                                 }               
  97.                         }
  98.                 });
  99.                
  100.                
  101.                 frame.addWindowListener(new WindowAdapter()
  102.                 {
  103.                         public void windowClosing(WindowEvent e)
  104.                         {
  105.                                 System.exit(0);
  106.                         }
  107.                 });
  108.         }
  109. }

复制代码
是发送出的毛病。实在找不到到底哪里写错了,谢谢

作者: 谭立文    时间: 2012-10-6 15:37
把抛出的异常贴上吧
作者: 郭阳    时间: 2012-10-6 15:55

就是空指针异常啊{:soso_e134:}崩溃了
就是第100行出的问题,我又试验了一下byte[] buf=new byte[1024];
然后DatagramPacket dp=new DatagramPacket(buf,buf.length,···········);依然报空指针错误!!!
到底什么情况这是!!

作者: 郭阳    时间: 2012-10-6 15:55
谭立文 发表于 2012-10-6 15:37
把抛出的异常贴上吧

哥们救我啊中午饭还没吃呢
作者: 柏占肖    时间: 2012-10-6 16:08
第44行代码改成ds_sender=new DatagramSocket();
作者: 黄小贝    时间: 2012-10-6 16:12
柏占肖 发表于 2012-10-6 16:08
第44行代码改成ds_sender=new DatagramSocket();

楼上正解
作者: 郭阳    时间: 2012-10-6 16:13
柏占肖 发表于 2012-10-6 16:08
第44行代码改成ds_sender=new DatagramSocket();

谢谢恩人啊
作者: 李润根    时间: 2012-10-6 16:49
                try
                {
                        DatagramSocket ds_sender=new DatagramSocket();
                }
                catch (Exception e)
                {
                        e.printStackTrace();
                }



44行,为什么重新创建一个DatagramSocket引用变量呢?





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2