web-dev-qa-db-fra.com

Qu'est-ce que le déréférencement possible d'un pointeur nul?

Je crée un programme pour SFTP dans NetBeans.

Une partie de mon code:

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
        }

Je reçois un avertissement dereferencing possible null pointer, comment puis-je résoudre ces avertissements ??? Où je peux déconnecter ma Session et Channel ???

12
Ankit Lamba

sessionTarget = jsch.getSession(backupUser, backupHost, backupPort); Ici, dans cette ligne, la méthode getSession() peut générer une exception. Les variables sessionTarget et channelTarget sont donc nulles et dans le bloc finally, vous accédez à ces variables, ce qui peut provoquer une exception de pointeur nul.

Pour éviter cela, dans le bloc finally, recherchez la valeur null avant d'accéder à la variable.

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

Cela signifie: que se passe-t-il si vos channelTarget et sessionTarget sont nuls dans votre bloc finally? Vérifiez les null pour éviter l'avertissement.

1
sadhu

Je pense que netbeans essaye simplement de vous avertir que ceux-ci peuvent être nuls, ce qui n'est peut-être pas tout à fait vrai. Vous pouvez cependant choisir de désactiver les avertissements. Il suffit de placer votre curseur sur l'avertissement, appuyez sur ALT+ENTER et choisissez parmi les choix proposés même pour désactiver les avertissements.

0