Что такое разыменование нулевого указателя?
Я делаю программу для 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
???
Ответы
Ответ 1
sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);
Здесь в этой строке метод getSession()
может вызывать исключение, поэтому переменные sessionTarget
и channelTarget
будут равны нулю, а в блоке finally вы получаете доступ к этим переменным, что может вызвать исключение null указателя.
Чтобы избежать этого, в блоке finally проверьте значение null перед доступом к переменной.
finally {
if (channelTarget != null) {
channelTarget.exit();
channelTarget.disconnect();
}
if (sessionTarget != null ) {
sessionTarget.disconnect();
}
}
Ответ 2
Это означает: что, если ваши channelTarget
и sessionTarget
равны нулю в вашем блоке finally? Проверьте их на отсутствие, чтобы избежать предупреждения.
Ответ 3
Я думаю, что netbeans просто пытается предупредить вас, что они могут быть нулевыми, что не обязательно не обязательно. Однако вы можете отключить предупреждения. Просто наведите курсор на предупреждение, нажмите ALT+ENTER
и выберите один из вариантов, даже чтобы отключить предупреждения.