IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Evaluation de faux && (null pointer exception)


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut Evaluation de faux && (null pointer exception)
    Bonjour

    Il me semblait qu'en java les expressions booléennes étaient évaluées de manière intelligente c'est à dire interrompues dès qu'elles s'évaluent

    Pourtant j'ai un null pointer exception sur cette expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothSocket.isConnected()' on a null object reference
    return  mBlueSocket!=null && mBlueSocket.isConnected() && (mState == STATE_CONNECTED) ;
    Pourtant mBlueSocket étant donc null, l'expression aurait du s'évaluer à faux sans avoir à évaluer le reste de l'expression.

    Pourriez-vous m'éclairer sur ce point ?

    Merci d'avance

    Nathalie

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Elles le sont. Tu est sûr que c'est bien la ligne concernée par l'erreur? Que ce n'est pas un autre appel à isConnected qui foire?
    Est-ce que mBlueSocket serait modifié par un autre thread au milieu du test et passerait à null après le check !=null?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Est-ce que mBlueSocket serait modifié par un autre thread au milieu du test et passerait à null après le check !=null?
    Effetivement je penche plus pour cette option !
    mais alors comment puis-je faire ? il faut que je mette des try/catch partout ?

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Est-ce que mBlueSocket serait modifié par un autre thread au milieu du test et passerait à null après le check !=null?
    Hum, ce serait plutôt difficile à reproduire ça non? Enfin sans voir tout le code difficile à dire, mais si c'était ça, ça devrait plutôt sembler aléatoire (un coup ça passe, un coup ça passe pas...)

    Sinon non, pas de try/catch partout (c'est le meilleur moyen d'avoir un code tout pourrite), mais plutôt des sémaphores (blocs synchonized avec le verrou qui va bien ou utilisation du package java.util.concurrent), mais seulement à condition que tu arrives à expliquer quel thread fait quoi.

    Moi sinon, je pencherais assez volontiers pour quelque chose de plus con: compilation foireuse (erreurs dans le projet, etc). ou problème de chargement dans l'émulateur, et en fait tu exécutes une vieille version de la classe sans même le savoir...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Pill_S, merci pour tes retours. Il faut effectivement que je me penche sur la synchronisation. C'est effectivement assez aléatoire comme problème.




    Tu mentionnes les problèmes de compilation, ici je ne pense pas que ce soit le cas mais parfois j'ai l'impression quand je compile qu'il ne prends pas en compte mes modifs (je le vois en débug il fait n'importe quoi).
    A quoi est-ce du ? Comment peut-on l'éviter ?
    Je n'utilise pas l'émulateur (à cause du bluetooth)

    Merci d'avance

Discussions similaires

  1. Tomcat 5.5 Null Pointer Exception
    Par nono44200 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 07/04/2007, 10h00
  2. Null pointer Exception pour ma Fenetre
    Par LeXo dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 22/01/2007, 09h17
  3. Null Pointer Exception
    Par gloglo dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2006, 11h32
  4. [Struts] Null Pointer Exception
    Par n@n¤u dans le forum Struts 1
    Réponses: 1
    Dernier message: 01/08/2006, 13h10
  5. Null Pointer Exception
    Par snouppy dans le forum JBuilder
    Réponses: 3
    Dernier message: 13/06/2006, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo