我想用java写个图形界面的FTP客户端,下面是部分代码:这先说下,client是个Socket对象,代码的目的是从服务器中取得响应并在终端显示出来
        InputStream is = client.getInputStream();
BufferedReader response = new BufferedReader(new InputStreamReader(is));
                                while(true)
{

echo = response.readLine();
if(echo.isEmpty())
break;
else
System.out.println(echo + echo.length());
}
我现在的问题就是if(echo.isEmpty())这个始终无法进行。就是说在response.readLine()无法读到响应的时候echo总是不能break;,然后整个程序就timeout。后来我把红色部分换成echo == null也不行。我在javadoc中看到的当response达到流末端时readLine返回的是null啊……我该怎么办,各位前辈帮帮忙……

解决方案 »

  1.   

    echo是个字符串吧,你的读取数据逻辑写得很奇怪啊。一般都是 while((echo = response.readLine()) != null) 吧
      

  2.   

    package com.xuz.csdn.worldcup.day8;import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;public class FileReader { public static void main(String[] args) {
    InputStream is = null;
    BufferedReader response = null;
    try {
    is = new FileInputStream("d:/1.txt");
    response = new BufferedReader(new InputStreamReader(is));
    String echo ;
    while ((echo = response.readLine()) != null) {
    System.out.println(echo);
    }
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    response.close();
    is.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }}
      

  3.   

    试了一下这个,还是一样啊……问题是我不知道为什么echo和null之间会不相等……
      

  4.   

    代码很漂亮,但是我看这个和我的原理上是一样的啊,先新建一个输入流,然后用这个输入流建立一块BufferedReader,再从BufferedReader中获取每一行的内容。区别只是您这个是File对象我那个是Object对象啊……现在我这遇到的问题是readLine()之后如果得不到结果echo的值好像不是null啊……这个循环始终退不出去……郁闷
      

  5.   

    我插入整个函数源代码吧……看看是不是其他地方出了问题
    private void SendCmd(String command)
    {
    try
    {

    String echo = " ";
    os=client.getOutputStream();
                    is=client.getInputStream();
                    send = new PrintWriter(os,true);
                    response = new BufferedReader(new InputStreamReader(is));

    send.write(command + "\r\n");
    send.flush();

    System.out.println("> " + command);



    while((echo = response.readLine())!= null)
    {
    System.out.println(echo + echo.length());
    statusBar.append(echo+"\n");//放到图形界面中的状态栏中

    }
    response.close();
    is.close();
    }
    catch(NullPointerException ex)
    {
    ex.printStackTrace();
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    System.out.println("发送信息时出错\n");
    }

    }
    程序运行时其他位置都没问题,不用循环只用单句读readLine()也没问题,但是一旦换成这个循环就会死机,终端输出是没问题的,但是出来的图形界面是死掉的,而且我在主程序中三次调用这个函数发送命令,终端上的显示却只有第一个
      

  6.   

    readLine()之后如果得不到结果echo的值好像不是null啊
    都打印出来,看看到底是什么
      

  7.   

    死机是停在readLine了吗?验证过了吗?
    P.S.readLine如果读不到行尾结束标志或null是会造成阻塞的
      

  8.   

    我在Eclipse里面做那个图形界面的东西,该怎么用那个Debug呢……因为整个这个函数是用在actionPerformed()里面作为点击JButton后的事件进行的……