2013-12-09 59 views
0

以下是我的FTPClient重试方法。它有一个错误。当初始连接成功时没有问题。但是,如果2,3尝试总是以NullPointerException结束。显然连接是重试成功,但是当我尝试列出远程文件时,它会抛出异常。在java中的FTPClient(apache commons net)上重试连接

FTPClient ftpConnection(int in, FTPCon objGetFiles) { 

    FTPClient ftp = null; 

    if (in < RetryCount) { 
     try { 
      in = in + 1; 
      logger.debug("connecting ........."); 
      ftp = objGetFiles.connectToServer(FTPServer, FTPPort, FTPUser, FTPPasswd, RDir); 
      logger.debug("connected and the ftp object is "+ftp); 


     } catch (IOException ioe) { 

      logger.debug(ioe.toString()); 
      logger.debug("sleeping for " + (RetrySleep/1000) + " sec"); 
      try { 
       Thread.sleep(RetrySleep); 
       logger.debug("retrying connection"); 
       ftpConnection(in, objGetFiles); 

      } catch (InterruptedException iex) { 
       logger.debug(iex.toString()); 
      } 

     } 
    } else { 
     logger.debug("maximum retry exceed."); 
    } 

    return ftp; 

} 

DEBUG Starter - retrying connection 
    DEBUG Starter - connecting ......... 
    DEBUG FTPCon - connecting to server .... 
    DEBUG FTPCon - 230 Logged on 
    DEBUG FTPCon - changing working directory 
    DEBUG FTPCon - 250 CWD successful. "/tmp" is current directory. 
    DEBUG Starter - connected and the ftp object is  [email protected] 
    DEBUG Starter - java.lang.NullPointerException 

FTPFile n[] = ftp.listFiles(); 

以上是它抛出NullPointerException异常的地方。我相信它在重试方法中的错误(如初始连接始终正常工作),但至今没有运气

回答

0

您递归调用ftpConnection(),但你最终只返回顶级ftp变量自ftpConnection()每次调用具有自己ftp-variable。由于ftpConnection(in, objGetFiles)的结果未分配给变量,因此重试呼叫生成的对象FTPClient会立即丢失。

由于速战速决做

 try { 
      Thread.sleep(RetrySleep); 
      logger.debug("retrying connection"); 
      ftp = ftpConnection(in, objGetFiles); 

     } catch (InterruptedException iex) { 
      logger.debug(iex.toString()); 
     } 

但是,如果使用递归是去,或者如果一个循环是对这类问题不是更好的正确方法我会考虑。

+0

谢谢指出。 – k119

相关问题