// 读取数据
private class readThread extends Thread { public void run() {
BufferedInputStream inStream = null;
String s = new String();
try {
inStream = new BufferedInputStream(socket.getInputStream());
while (true) {
byte[] buffer = new byte[1024];
inStream.read(buffer);
String str = new String(buffer);
Log.i("", str.trim());
s += str.trim();
Log.i("333333333333333333", s);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Message msg = new Message();
Log.i("222222222", s);
msg.obj = s;
msg.what = 1;
LinkDetectedHandler.sendMessage(msg);
s = new String();
}
}
}为什么finally里的代码不执行?

解决方案 »

  1.   

    我想知道你的代码是怎么编译通过的,你把class用private修饰。
      

  2.   

    你的while(true){}已经是死循环了,所以永远不会执行finally
      

  3.   

    while(true)死循环了,发生错误才会走到finally 
      

  4.   

    这个是内部类,你懂得!
    死循环会让read方法异常,异常时就会跳出我知道你说的,在死循环中,read肯定会出现异常。但是为什么没有执行finally!
      

  5.   

    int data;
    byte[] buffer = new byte[1024];
    while ((data=System.in.read())!=-1) {
     inStream.read(buffer);
     String str = new String(buffer);
     Log.i("", str.trim());
     s += str.trim();
     Log.i("333333333333333333", s);
    }
    再好好看看read()方法
      

  6.   

    我按你的写了,但还是没走finally。我肯定没有死循环了!
      

  7.   

    LZ确定发生异常了?catch的地方有打印出什么信息了?
    LZ何以肯定read就会出现异常?read是个阻塞方法,如果没有数据,你的read就被堵塞着,除非关闭socket什么的
      

  8.   

    按6楼的方法还是没有执行finally
      

  9.   

    并且while后边的代码都没有执行!我测试了没有死循环!
      

  10.   

    read()会阻塞啊,怎么回发生异常呢?
      

  11.   

    可能是socket没有数据写入,造成read()函数阻塞吧
      

  12.   

    每次都是在while处不往后走了,如何有效的解决!
      

  13.   

    我教你怎么验证你的想法 循环里像如下这样写 看看finally执不执行
     while (true) {
                        throw new IOException("异常抛给你看,finally执不执行");
                        Log.i("333333333333333333", s);
                    }
      

  14.   

    我在网上搜索了下,貌似是read方法阻塞造成不往后执行了。如何解决read阻塞才是根本,希望大侠帮忙!
      

  15.   

    加个 超时 socket.setSoTimeout()
      

  16.   

    = =.菜鸟看不懂怎么走出while的
      

  17.   

    服务器没崩溃吧?程序还没死? while是死循环哦亲
      

  18.   

    while肯定不是死循环
    当read读完时就阻塞了
      

  19.   

    你的while(true){}已经是死循环了,且在while循环中不会发生IOException所以不会执行finally
      

  20.   

    while (true) {
                        throw new IOException("异常抛给你看,finally执不执行");
                        Log.i("333333333333333333", s);
                    }
    试试 看
    香香看
      

  21.   

    可否这样:
    int result = inStream.read(buffer);
    if (result < 1)
        break;
    这样读取到末尾后就跳出循环?
      

  22.   

    肯定是因为 没有 读取到数据的缘故,阻塞在那里了。你可以用System.in.read();代替,都是等到接收数据的。只是这个要你从控制台输入,不然就一直等在那里。跟你代码的场景是一样的。
      

  23.   

    read怎么可能发生异常 他读完了就返回-1 你自己好好看看read的说明  
      

  24.   

    // 读取数据
    private class readThread extends Thread { public void run() { try {
    BufferedReader br = new BufferedReader(new InputStreamReader(
    socket.getInputStream()));

    String s = new String();
    String readString = null;
    while ((readString = br.readLine()) != null) {//流读取为空时阻塞
    Log.i("", readString.trim());
    s += readString.trim();
    Log.i("333333333333333333", s);
    }
    Log.i("222222222", s);
    Message msg = new Message();
    msg.obj = s;
    msg.what = 1;
    LinkDetectedHandler.sendMessage(msg);
    s = new String();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    }
    }
    }
    我单步调试发现是流读取阻塞。
    现在如何解决阻塞!请大侠指点!
      

  25.   


    read 确实会抛IO异常 不过 read是阻塞方法api文档:“读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞”
      

  26.   

    判断一下 读完了 break;