web-dev-qa-db-ja.com

可能なnullポインターの逆参照とは何ですか?

SFTPNetBeans用のプログラムを作成しています。

私のコードの一部:

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 ???の接続を解除できる場所

15
Ankit Lamba

sessionTarget = jsch.getSession(backupUser, backupHost, backupPort);この行では、getSession()メソッドが例外をスローする可能性があるため、変数sessionTargetおよびchannelTargetはnullになり、最後にブロック、これらの変数にアクセスしているため、nullポインター例外が発生する可能性があります。

これを回避するには、変数にアクセスする前に、finallyブロックでnullを確認します。

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

つまり、finallyブロックでchannelTargetおよびsessionTargetがnullの場合はどうなりますか?警告を回避するためにnullをチェックしてください。

1
sadhu

Netbeansは、これらがnullである可能性があることを警告しようとしているだけだと思います。ただし、警告を無効にすることもできます。警告カーソルALT+ENTERおよび警告を無効にする場合でも、選択肢から選択します。