什么是解除引用可能的空指针?

时间:2014-02-06 07:08:03

标签: java netbeans nullpointerexception dereference

我正在SFTP中为NetBeans制作一个程序。

我的代码的某些部分:

com.jcraft.jsch.Session sessionTarget = null;
com.jcraft.jsch.ChannelSftp channelTarget = null;
try {
       sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);
       sessionTarget.setPassword(backupPassword);
       sessionTarget.setConfig("StrictHostKeyChecking", "no");
       sessionTarget.connect();
       channelTarget = (ChannelSftp) sessionTarget.openChannel("sftp");
       channelTarget.connect();

       System.out.println("Target Channel Connected");
       } catch (JSchException e) {
            System.out.println("Error Occured ======== Connection not estabilished");
            log.error("Error Occured ======== Connection not estabilished", e);
       } finally {
            channelTarget.exit();     // Warning : dereferencing possible null pointer
            channelTarget.disconnect();  // Warning : dereferencing possible null pointer
            sessionTarget.disconnect();  // Warning : dereferencing possible null pointer
        }

我收到警告dereferencing possible null pointer,我该如何解决这些警告??? 我可以在哪里断开SessionChannel ???

3 个答案:

答案 0 :(得分:19)

sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);在这一行中,getSession()方法可以抛出异常,因此变量sessionTargetchannelTarget将为null,并且在finally块中,正在访问那些可能导致空指针异常的变量。

为了避免这种情况,在访问变量之前,在finally块中检查null。

finally {
  if (channelTarget != null) {
       channelTarget.exit();     
       channelTarget.disconnect();  
  }
  if (sessionTarget != null ) {
       sessionTarget.disconnect();  
  }
}

答案 1 :(得分:1)

这意味着:如果您的channelTargetsessionTarget在您的finally块中为空,该怎么办?检查它们是否为空以避免警告。

答案 2 :(得分:0)

我认为netbeans只是试图警告你,这些可能是空的,这可能不是真正的necasarilly。您可以选择禁用警告。只需将光标放在警告按ALT+ENTER上,然后从选项中选择以禁用警告。