2017-11-27 6 views
0

Ich habe das folgende Stück Code. SonarLint Sprichwort-Socket sollte im Block schließlich geschlossen werden.SonarLint Sprichwort Steckdose ist nicht geschlossen auch geschlossen

Aber ich habe es schon geschlossen. Ich habe beobachtet, eine weitere Sache ist hier: Ich bekomme das nur, wenn ich serverSocket.isClosed() Bedingung in schließlich wenn Bedingung habe. Wenn ich es entferne, ist das Problem gelöst.

Hier möchte ich wissen, was das Problem mit dieser Bedingung becoz von diesem SonarLint ist konnte nicht erkennen, die Steckdose schließen.

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(); 
     } 
    } 
} 

Antwort

0

Wegen der dies: if(serverSocket != null &&

Sie verwenden eine if Anweisung und prüfen, ob die Serversocket in NOT NULL UND hier das Problem ist, das ist serverSocket nicht null ist dann der && Operator Lassen Sie nicht die nächste Bedingung ausführen und die if Anweisung wird nicht ausgeführt, schließlich wird die Verbindung nicht geschlossen.

+0

danke für die Antwort.Aber es scheint, dass Sie meine Frage nicht richtig gelesen haben.Was ich sage ist, ja, es schließt, aber wenn extra Bedingung (serverSocket.isClosed()) in endlich blockieren, Aufgrund dieser SonarLint sagen Socket ist nicht geschlossen. Warum? –

+0

@SravaniYapamanu Es ist nicht der 'isClosed()' Test (der sowieso überflüssig ist). Es ist das Fehlen dieses verschachtelten "finally" Blocks in Ihrem Code. – EJP

+0

@ EJP..können Sie mir bitte zeigen, wie man es schreibt? –

Verwandte Themen