//代码如下:其中connectMonitorMenuItem是启动服务端的菜单,接受客户端的socket连接。因为是多个客户端,所以我每次有一个客户端过来就开辟一个线程与之通信。 问题是我一点这个菜单项整个界面就死掉了,不能操作了。但是我看了下还是能接受客户端的连接。
connectMonitorMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              
while(true)
{
try {
ServerSocket server=new ServerSocket(5678);
Socket client=server.accept();
RemoteMonitoring remote=new RemoteMonitoring(client);
new Thread(remote).start();
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

解决方案 »

  1.   

    多打几个debug出来 看看是哪句走不下去
      

  2.   

    debug好像只是检测有值得参数吧,他这个没值怎么检查
      

  3.   

    ServerSocket server=new ServerSocket(5678); 怎么放在while循环里面了,服务器端口开一次就可以了
      

  4.   

    第一正如四楼所说:ServerSocket不应该放在while循环里,这样你迟找也会报端口错误。
    第二最关键的是Socket client=server.accept(); 是阻塞通信也就是说服务器一直会监听这个端口,直到有客户连接时,线程才会执行下去。所幸的是jdk为我们提供了,非阻塞通信,serverSocketChannel。你用它可以解决你上面的错误。
      

  5.   

    除了上面说到的外。
    server.accept(); 
    这一句要用一个新线程执行。因为这个是阻塞的。
      

  6.   

    ServerSocket server=new ServerSocket(5678);
    每次循环都启动一个ServerSocket,而且用的同一个端口,肯定会出异常的。第一次循环的时候是能接受客户端请求的,但是之后会因为抛出异常而终止线程。
    不清楚你的其他部分的代码是怎样的。