2017-11-27 15 views
0

私は次のコードを持っています。 SonarLintはソケットがfinallyブロックで閉じられるべきだと言っています。SonarLintがソケットが閉じていないと言っています

しかし、私はすでにそれを閉じています。 もう1つのことがわかりました。私は、条件が最後の場合にserverSocket.isClosed()条件がある場合に限り、これを取得します。私がそれを取り除くと、問題は解決されます。

ここで私は、この状態の問題が、そのsonarLintのbecozがソケットクローズを認識できないことを知りたいと思います。そのための

ServerSocket serverSocket = null; 
try 
{ 
    serverSocket = new ServerSocket(5555); 
} 
catch(IOException e) 
{ 
    e.printStackTrace(); 
} 
finally 
{ 
    if(serverSocket != null && !serverSocket.isClosed()) 
    { 
     try 
     { 
      serverSocket.close(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

答えて

0

この:NULL、ここで 問題は、それがserverSocketあるではありません中のServerSocketが、その後&&オペレータは意志nullでない場合は、if文を使用してチェックしているif(serverSocket != null &&

次の条件を実行させず、ifステートメントは実行されません。結局、接続は閉じられません。

+0

あなたは私の質問を正しく読んでいないようです。私は言っていますが、確かに閉鎖していますが、最後のブロックに余分な条件(serverSocket.isClosed())があると、このsonarLintソケットどうして? –

+0

@SravaniYapamanu isClosed()テストではありません(とにかく冗長です)。これはあなたのコードでこのネストされた 'finally'ブロックの欠如です。 – EJP

+0

@ EJP..それを書く方法を教えてください。 –

関連する問題