Partage
  • Partager sur Facebook
  • Partager sur Twitter

NullPointerException

Pourquoi ça arrive ?

Sujet résolu
    13 janvier 2011 à 16:59:05

    Bonjour !

    Je travaille sur un petit serveur en Java, et je rencontre une exception que je ne comprend pas du tout. Mais alors pas du tout.

    Voici la méthode à problème :
    private List<MySocket>		sockets;
    
    	public synchronized void     addSocket(MySocket socket)
    	{
    	  SocketChannel              sChannel = socket.GetSocketChannel();
    
    	  try
    	  {
    		sockets.clear();
    		select.wakeup();
    		sChannel.register(select, sChannel.validOps());
    		sockets.add(socket);
    	  }
    	  catch (ClosedChannelException e)
    	  {
    		e.printStackTrace();
    	  }
    	}
    


    Je rencontre ici une NullPointerException à la ligne 12.
    Premièrement, impossible de savoir si c'est la variable socket ou la variable sockets qui cause cette exception : les deux ont déjà été utilisé plus tôt dans la méthode sans pour autant avoir provoqué un plantage.

    En cherchant sur Internet, cette exception ne devrait normalement arriver qu'en tentant d'utiliser une classe qui n'a pas été initialisé auparavant.
    Je n'ai pas encore beaucoup pratiqué Java, mais j'ai jusque là toujours supposé que le garbage collector supprimait une instance dès qu'il n'existait plus aucune référence pointant sur celle-ci. Or, dans ce cas là, c'est impossible (d'autant plus que la référence est encore valide dans la méthode appelante).

    Qu'est-ce qui peut bien m'arriver ?
    Il y a-t-il des cas particuliers pouvant engendrer cette exception ?

    EDIT: ok, ça a été rapide...
    List n'est pas instanciable pour une raison. Pourquoi diable le sockets.clear n'a pas planté, je ne sais pas, mais tout semble plus logique maintenant.
    Nota benne : utiliser ArrayList plutôt que List ^^ ! J'imaginais que List était plus comme std::list que comme un objet pouvant représenter plusieurs types de listes ! Mon erreur !
    • Partager sur Facebook
    • Partager sur Twitter

    NullPointerException

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown