在此先感谢大家的帮助
当我在命令行下运行后,我在右边的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();
}}
当我在命令行下运行后,我在右边的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();
}}
// TODO Auto-generated method stub
byte[] b = new byte[1024];
b = e.getActionCommand().getBytes(); //为什么这样用?而不是通过TextField获得String呢?
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);
//你右边没定义事件,左边才是输入