下面这个JAVA做的 Server 为什么不能运行,点击“start”按钮 窗口就会自动卡死

/**ComputerNetworks*Purpose:Thisisaserver*thatcouldusetomonitorandrecievemessagefromo... /*
* Computer Networks
* Purpose : This is a server
* that could use to monitor and recieve message from other PCs
*/

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import javax.swing.*;

/**
* @version 1.0.0
* @author
*/
public class Server extends JFrame implements ActionListener{

// constructor
JButton button1;
JButton button2;
Thread thread;
DatagramSocket dataSocket;
JPanel panelOne = new JPanel();
JPanel panelTwo = new JPanel();
static JTextArea text = new JTextArea("Messages : ");

public Server(){
super("Server");
setBounds(400,400,400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
text.setEditable(false);

button1 = new JButton("Start Server");
button1.addActionListener(this);
button2 = new JButton("Close Server");
button2.addActionListener(this);

panelOne.add(button1);
panelOne.add(button2);
panelTwo.add(text);

add("North",panelOne);
add("Center",panelTwo);

}

public void actionPerformed(ActionEvent e) {

if(e.getSource() == button1){
text.setText("Server 5001 ports is monitoring\n");
try
{
dataSocket = new DatagramSocket(5001); // $$$$$
}
catch(Exception exception)
{
exception.printStackTrace();
}
byte buf[] = new byte[1024];
DatagramPacket datagram = new DatagramPacket(buf, buf.length);
while(datagram.getData() != null)
{
try
{
dataSocket.receive(datagram);
text.append(new String(buf, 0, datagram.getLength()) + "\n");
}
catch(Exception exception)
{
exception.printStackTrace();
}
}

}
if(e.getSource() == button2){
text.setText("Server 6000 ports is closed\n");
dataSocket.close();
}
}

public static void main(String args[]){
Server myServer = new Server();
}
}
展开
 我来答
封蔼幺天1H
2011-10-02
知道答主
回答量:7
采纳率:0%
帮助的人:4.3万
展开全部
卡住是正常的。你的receive方法一直堵塞,导致actionPerformed方法停在receive方法处返回不了,你的button也就弹不起来了,从而出现卡住的现象。建议开一个线程处理。
lezenglei
2011-09-29 · 超过25用户采纳过TA的回答
知道答主
回答量:50
采纳率:100%
帮助的人:61.1万
展开全部
dataSocket.receive(datagram);这句是一直在等待数据包吧,没有另外的程序给dataSocket这个对象所绑定的端口5001发包的话就会一直处于等待状态,所以你的程序在会在那边挂起的吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tangqiliang520
2011-09-28
知道答主
回答量:26
采纳率:0%
帮助的人:14万
展开全部
你一次给它渲染这么多控件!不死才怪
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友59f0b6d
2011-09-28
知道答主
回答量:46
采纳率:0%
帮助的人:8.7万
展开全部
报什么错没有
追问
没有报错
追答
把连接提出去另外写试试,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式