在此先感谢大家的帮助
当我在命令行下运行后,我在右边的TextField输入内容,回车后,并没有将其清空,并且显示在另一个窗口的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 tf = new TextField(30);
TextField input = new TextField(20);
List l = new List(6);
DatagramSocket ds;

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

}
}

public void init(){
Panel p = new Panel();
p.setLayout(new BorderLayout());

f.add(l);
f.add("South",p);
p.add("East",tf);
p.add("West",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];

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

try{
DatagramPacket dp = new DatagramPacket(b,b.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{
DatagramSocket ds = new DatagramSocket(3000);

DatagramPacket dp = new DatagramPacket(b,b.length);
while(true){
ds.receive(dp);
l.add(new String(b,0,dp.getLength())+":from "+dp.getAddress().getHostAddress(),0);
}
}catch(Exception e){
}
}
}public class TestChat {

public static void main(String[] args){

new Chat().init();
}}

解决方案 »

  1.   

     public void actionPerformed(ActionEvent e) {
      // TODO Auto-generated method stub
      byte[] b = new byte[1024];
        
      b = e.getActionCommand().getBytes(); //为什么这样用?而不是通过TextField获得String呢?
      

  2.   

        @Override
        public void run() {
            // TODO Auto-generated method stub
            byte[] b = new byte[1024];
            try {
    //            DatagramSocket ds = new DatagramSocket(3000);  这里~~
                DatagramPacket dp = new DatagramPacket(b, b.length);
                while (true) {
                    ds.receive(dp);
      

  3.   

    //我在右边的TextField输入内容,回车后,并没有将其清空
    //你右边没定义事件,左边才是输入