我正在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
,我该如何解决这些警告???
我可以在哪里断开Session
和Channel
???
答案 0 :(得分:19)
sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);
在这一行中,getSession()
方法可以抛出异常,因此变量sessionTarget
和channelTarget
将为null,并且在finally块中,正在访问那些可能导致空指针异常的变量。
为了避免这种情况,在访问变量之前,在finally块中检查null。
finally {
if (channelTarget != null) {
channelTarget.exit();
channelTarget.disconnect();
}
if (sessionTarget != null ) {
sessionTarget.disconnect();
}
}
答案 1 :(得分:1)
这意味着:如果您的channelTarget
和sessionTarget
在您的finally块中为空,该怎么办?检查它们是否为空以避免警告。
答案 2 :(得分:0)
我认为netbeans只是试图警告你,这些可能是空的,这可能不是真正的necasarilly。您可以选择禁用警告。只需将光标放在警告按ALT+ENTER
上,然后从选项中选择以禁用警告。