[java]数组声明引发聊天室小程序无法运行

     这是一段经典的聊天室实现代码,通过DatagramSocket和DatagramPacket来发送和接受数据,使用的是UDP网络协议,程序出错的原因是声明的字符型数组 byte []buf ;在后面不可以使用,提示找不到字符,我输入buf.也并没有参数提示。奇怪,不得其解!

 

程序清单 Chat.java

import  java.awt. * ;
import  java.awt.event. * ;
import  java.net. * ;

/**
 * 一个小型聊天室的实现
 
*/

 
 
public   class  Chat
 
{
     Frame f 
= new Frame("我的聊天室");
     TextField tfIP 
= new TextField(15); //15为行列
     List ls = new List(6);
     DatagramSocket ds;
     
/*由于DatagramSocket的构造函数可能抛出异常,我们程序需要用try...catch扑获异常
      *所以不能直接在这里调用DatagramSocket的构函对ds进行初始化,我们需要将ds的初始化放在Chat
      *类里面去初始化
      
*/

      
public Chat()
      
{
          
try
          
{
              ds 
= new DatagramSocket(3000);
          }

          
catch(Exception e){};
          
          
new Thread(new Runnable()
          
{
              
public void run()
              
{
                  
byte [] buf = new byte[1024];
                  DatagramPacket dp1 
= new DatagramPacket(buf,1024);
                  
while(true)
                  
{
                      
try
                      
{
                         ds.receive(dp1);
                         String strRecv 
= new String(buf,dp1.getLength())+" from "+
                             dp1.getAddress().getHostAddress();
                         ls.add(strRecv,
0);
                      }

                      
catch(Exception e)
                      
{
                          e.printStackTrace();
                      }

                  }

              }

          }

          ).start();
      }

     
     
public static void main(String[] args)
     
{
         Chat chat 
= new Chat();
         chat.init();
     }

     
     
public void init()
     
{
         f.setSize(
400,400);
         f.add(ls);
         
         Panel panel 
= new Panel();
         panel.setLayout(
new BorderLayout());
         panel.add(
"East",tfIP); //添加组件
         TextField tfData = new TextField(20);
         f.add(
"South",tfData);
         f.setVisible(
true);
         f.setResizable(
false); //限制用户改变窗口大小
         
         
//增加关闭窗口的事件处理代码
         f.addWindowListener(new WindowAdapter()
         
{
             
public void windowClosing(WindowEvent e)
             
{
                 ds.close(); 
//关闭socket
                 f.setVisible(false);
                 f.dispose();
                 System.exit(
0); //退出系统
             }

         }
);
         
         
//增加在文本框输入值按下回车键的响应代码
         tfData.addActionListener(new ActionListener()
             
{
                 
public void actionPerformed(ActionEvent e)
                 
{
                     
//取出文本中的字符,并将其转换成字符数组
                     byte buf[];
                     buf 
= e.getActionCommand().getBytes();
                     
//程序错误处,编译提示无法找到符号 buf
                     DatagramPacket dp = new DatagramPacket(buf,buf.length,
                         InetAddress.getAllByName(tfIP.getText()),
3000);
                     
try
                     
{
                         ds.send(dp);
                     }

                     
catch(Exception ex) //这里用ex代替e,因为e已经被使用了
                     {
                         ex.printStackTrace(); 
                     }

                     
//清空发送数据后的文本框
                     ((TextField)e.getSource()).setText("");
                 }

             }
);
     }

 }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值