public void run() {
boolean isRun = true;
String message = "";
while (isRun) {
   try {
message = recieve.readLine();
System.out.println("继续.................");
for(int i = 0; i<sockets.size();i++){
            Client c = sockets.get(i);
c.sendMessage(message);
}
  } catch (IOException e) {
        System.out.println("报异常.....................");
isRun = false;
           close();
sockets.remove(this);
}

解决方案 »

  1.   

    上面的代码是服务端一个内部类Client(实现Runnable)的run 方法的,当每有一个客户端接入是就创建一个Client对象,添加到sockets中,并启动线程,问题就是,但我关闭客户端的时候,上面红色标注的代码,这是应该是报异常才对,然后会跳入执行catch代码块才是,但是,情况不是这样的。这时候 readLine()方法不再是原先的阻塞状态,也不会跳入catch中执行,而是直接顺序的执行下去,这是这怎么一会事呢?
      

  2.   

    这是客户端的代码
    public void run() {
    boolean isRun = true;

    while (isRun) {
    try {
        recieveStr = recieve.readLine(); //当关闭窗口时,会跳入catch代码块中去
        System.out.println(recieveStr);
        if(recieveStr != null){
                recStr.append("来自服务端:" + "\n" + recieveStr + "\n");
        this.jb_show.setText(recStr.toString().trim());
    }
    break;
    } catch (IOException e) {
                      isRun = false;
                 System.out.println("对方下线了,bye-bye");
    }
    }
    }
      

  3.   


    有没有把message打印出来,有可能是客户端发过来关闭的消息。
    如果可以把你完整的代码打印出来。