关于java网络的问题,求java高手帮帮忙啊!在线等待!!!

下面是我做的一个聊天程序的服务器部分,刚写完用户登录的那部分代码,但为什么我点击启动服务器后就卡了?求高手帮帮忙!!!publicclassServer{JTextFie... 下面是我做的一个聊天程序的服务器部分,刚写完用户登录的那部分代码,但为什么我点击启动服务器后就卡了?求高手帮帮忙!!!
public class Server
{
JTextField textField;
JButton button;
JTextArea textArea;
JLabel label;

public void serverUi()
{
JFrame frame = new JFrame("服务器");
frame.setSize(300,200);
frame.setLayout(new GridLayout(3, 1));

JPanel panel1 = new JPanel(new GridLayout(1, 2));
JPanel panel2 = new JPanel(new GridLayout(1, 3));
JPanel panel3 = new JPanel(new GridLayout(1, 1));

panel1.add(new JLabel("服务器状态:"));
label = new JLabel("关闭");
panel1.add(label);

panel2.add(new JLabel("端口号:"));
textField = new JTextField();
panel2.add(textField);
button = new JButton("启动服务器");
panel2.add(button);

textArea = new JTextArea();
panel3.add(textArea);

frame.add(panel1);
frame.add(panel2);
frame.add(panel3);

button.addActionListener(new ServerListener());

frame.setResizable(false);
frame.setVisible(true);
}

public static void main(String[] args)
{
Server server = new Server();
server.serverUi();
}

Server server = this;
class ServerListener implements ActionListener
{

@Override
public void actionPerformed(ActionEvent e)
{
server.label.setText("已开启");

TreeMap<String, DatagramPacket> map = new TreeMap<String, DatagramPacket>();

//监听用户登录
while(true)
{
try
{
DatagramSocket socket = new DatagramSocket(Integer.parseInt(server.textField.getText()));

byte[] buffer = new byte[200];//保存用户的名字
DatagramPacket packet1 = new DatagramPacket(buffer, 20);
socket.receive(packet1);

//将用户的信息保存到TreeMap中
map.put(new String(buffer, 0, packet1.getLength()), packet1);

//遍历map对象的Key
Set set = map.keySet();
for(Object obj : set)
{
String name = (String)obj;

//将登录的用户显示到服务器的已登录用户列表
server.textArea.setText("");
server.textArea.setText(server.textArea.getText() + "\n" + name);
}

//遍历Map对象的value
Collection coll = map.values();
for(Object obj : coll)
{
DatagramPacket oldPacket = (DatagramPacket)obj;

byte[] names = server.textArea.getText().getBytes();//所有登录用户的名字的字节形式

DatagramPacket newPacketNew = new DatagramPacket(names, names.length
, oldPacket.getAddress(), oldPacket.getPort());

//将已登录用户名字的列表发送到已登录的用户
socket.send(newPacketNew);
}

}
catch (Exception e1)
{
e1.printStackTrace();
}
}
}
}
}
用户登录时会将用户名用过数据报包传到服务器
展开
 我来答
取个好听的名字太难了
2012-02-21 · 超过16用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:53万
展开全部
服务器与客户端交互的部分请用多线程,单线程的while循环必然导致服务器卡住
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式