自己又写了一个亦可用于发送,也可用于接收的程序
在发送了数据后,在List上显示
但是现在只显示第一次的输入
以后就不再显示了
请问怎么解决?
谢谢大家的帮助
package ChatRoom;import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.List;
import java.net.*;
class Chat implements Runnable{ Frame f = new Frame("ChatRoom"); 
TextField input = new TextField(); //用于输入
List l = new List(6);  //用于显示对方的输入
DatagramSocket ds = null;

Chat(){
try{
ds = new DatagramSocket(3000);
new Thread(this).start();
}catch(Exception e){

}
}

public void init(){

f.add(l);
f.add("South",input);
f.setSize(300,300);
f.setVisible(true);

f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
f.setVisible(false);
f.dispose();
System.exit(0);
}
});

input.addActionListener(new ActionListener(){ @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
byte[] b = new byte[1024];
String in;

b = e.getActionCommand().getBytes();

in= ((TextField)e.getSource()).getText();

System.out.println("Send:"+in);

try{
DatagramPacket dp = new DatagramPacket(in.getBytes(),in.length(),InetAddress.getByName("192.168.1.2"),3000);

ds.send(dp);
}catch(Exception ex){

}
((TextField)e.getSource()).setText(""); }

});


} @Override
public void run() {
// TODO Auto-generated method stub
byte[] b = new byte[1024];
try{

byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,1024);
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength())+" from "+dp.getAddress().getHostAddress()+":"+dp.getPort();

System.out.println("Receive:"+str);
l.add(str);
ds.close();

}catch(Exception e){
}
}
}public class TestChat {

public static void main(String[] args){

new Chat().init();
}}

解决方案 »

  1.   

     粗略看了下..你的线程只启动了一次 因为写在构造里了 构造只被调用一次.. 也就是接收数据的线程中run()只执行一次 另外最好打印下异常信息啊.. 看了个大概哦..可能不正确 
      

  2.   

    你run()方法里面只接受了一次,写个循环就行了。public void run() {
            // TODO Auto-generated method stub
            byte[] b = new byte[1024];
            try{
                boolean connect = true;
                while(connet) {
                    byte[] buf = new byte[1024];
                    DatagramPacket dp = new DatagramPacket(buf,1024);
                    ds.receive(dp);
                    String str = new String(dp.getData(),0,dp.getLength())               +"from "+dp.getAddress().getHostAddress()+":"+dp.getPort();
                    System.out.println("Receive:"+str);
                    l.add(str);
                }
                ds.close();
                
            }catch(Exception e){    
            }
        }
      

  3.   

    我有一篇文章,楼主可以参考一下。
    http://blog.csdn.net/preferme/archive/2010/06/12/5667002.aspx
      

  4.   

    完整 的 聊天程序,供参考,
    http://mybeautiful.javaeye.com/blog/659317