在一个线程里,无限循环响应操作while(true)
{rrstr=in.readUTF()
Frame1.refresh();
语句3;
语句4;
}我希望实现的是,如果in.readUTF()暂时没有从流中读到东西,就先执行后面的内容,然后在下一次
while循环里再继续读.然而调试时发现 in.readUTF()处于死等状态,不读出东西不往后执行.
改写成: if(!"".equals(rrstr=in.readUTF()))Frame1.refresh();
else{语句3;语句4;}情况也是一样,虽然读到空串,但仍无往下执行,一直在rrstr=in.readUTF()处死等请教解决思路,谢谢大虾.

解决方案 »

  1.   

    rrstr=in.readUTF()
    这个是阻塞式调用,你说的功能可以用NI/O里面的非阻塞式调用实现。
      

  2.   

    try{
                while(true)//一直监听服务器端信息
                {  try{sleep(2000);}  //休眠2秒,每2秒检查一次是否有客户端信息发来,检查得太频了死机
                   catch(InterruptedException e){System.out.println(e);}
                  //如果没消息那么线程继续睡觉
                   if((strLineInC=in.readLine())!=null)
                 {if(strLineInC.equals("88"))
                      { DisconnectC();}
                     else{
                        Tongxincilent.ta1.append("\n"+"服务器>>"+strLineInC+"  ("+h+":"+m+":"+s+")");      
                       strLineInC=null; }
                    }  
                }}catch(IOException e){System.out.println("出错!"+e);}
    用个线程每隔几秒时间检查1次,如果你用while一直循环,那检查频率超快,程序会没有响应的
    以前我作课设socket聊天程序的时候也碰到这个问题,上面是解决的代码,希望对你有帮助
      

  3.   

    谢谢楼上两位,NI/O里面的非阻塞式调用,如果能具体点点的话.民工兄的代码我想会一直阻塞在strLineInC=in.readLine())!=null,不会继续判断和循环.
      

  4.   

    你可以先判断 in.available() 来返回目前可以在非阻塞情况下可以读取的字节数