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

nhaq1z21  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(167)

我正在NetBeans中为SFTP编写程序。
我的代码的某些部分:

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???

b1uwtaje

b1uwtaje1#

sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);在这一行中,getSession()方法可以抛出异常,因此变量sessionTargetchannelTarget将为空,而在finally块中,您正在访问这些变量,这可能会导致空指针异常。
为了避免这种情况,请在访问变量之前在finally块中检查是否为null。

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

cdmah0mi2#

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

iyfamqjs

iyfamqjs3#

我认为netbeans只是想警告你这些可能是空的,这可能不是necasarilly真的。你可以选择禁用警告虽然。只要把你的光标放在警告按ALT+ENTER和选择,甚至禁用警告。

相关问题