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

Java Discussion :

NullPointerException dans un Thread


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut NullPointerException dans un Thread
    Bonjour,

    Alors voila, j'ai un soucis plutot étrange
    J'ai un thread qui exécute plusieurs tâches, dont celle d'envoyer les réponse d'un carte.

    Alors en fait le problème, c'est que j'envoie une première fois une commande Download à ma carte, qui télécharge le contenu ligne par ligne d'un fichier .hex
    Le téléchargement s’exécute bien sans probleme. Quand je ferme l'application, et que je refais la même manipulation, tout va bien également.

    Sur mon IHM j'ai plusieurs boutons qui correspondent à plusieurs commandes, alors quand j’exécute une commande X puis une autre Y, tout va bien.
    Quand je lance l'application, que j’exécute une commande X, Y OU Z et ENSUITE j’exécute la commande de téléchargement, tout va bien.
    Et par contre quand j'exécute une commande X ET Y et ENSUITE la commande de téléchargement, j'obtiens cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "Thread-2" java.lang.NullPointerException
    	at interface_carte_ier.Lire_Fichier.Reception(Lire_Fichier.java:39)
    	at interface_carte_ier.Envoi_USB.run(Envoi_USB.java:155)
    Et cela peut être dangereux pour la carte car c'est un Firmware que j'envoie et s'il ne s'installe pas entièrement, je risque de ne plus pouvoir communiquer avec ma carte.

    Voila, si vous avez besoin d'un bout de code, dites le moi.
    En attendant, je vous remercie d'avance
    Cordialement, MrShanky

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    J'ai résolu cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at interface_carte_ier.Lire_Fichier.Reception(Lire_Fichier.java:39)
    L'autre persiste ! Plus j'essaye, plus j'ai peur de perdre ma carte ! :'(

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par MrShanky Voir le message
    Voila, si vous avez besoin d'un bout de code, dites le moi.
    Non. Pourquoi aurait-on besoin de savoir ce que tu fais pour t'indiquer quel est le problème ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Ce qui se trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at interface_carte_ier.Envoi_USB.run(Envoi_USB.java:155)
    à cette ligne, c'est un IF qui est censé être vrai

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Ok docteur Jackson, nous allons réussir à réunir tous les éléments jusqu'à connaître le programme complet.
    Alors... Ce if est-il plutôt un ET ? Un OU ? Un appel de méthode, juste une variable ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Mdr
    Non. Pourquoi aurait-on besoin de savoir ce que tu fais pour t'indiquer quel est le problème ?
    Je viens de comprendre la touche d'humour qui était la dedans ^^
    Bon voici le code de mon thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    @Override
        public void run(){
            while (true)
            {
                //Affichage de l'heure sur L'IHM
                String txtDate = new SimpleDateFormat("HH:mm:ss    dd/MM/yyyy", Locale.FRANCE).format(new Date());
                ihm.heure(txtDate);
                //Traite la réponse de la carte et l'envoie à l'ihm
                if(Reponse != "")
                {
                    System.out.println("La réponse est : "+Reponse);
                    //ETAT_DL Concerne la classe Téléchargement permet de retourner la réponse directement à celle ci
                    if(ETAT_DL != "")
                    {
                        try {
                            dl.reception(Reponse);
                        } catch (SerialPortException ex) {
                            System.out.println(ex);
                        }
                        ETAT_DL = "";
                    }
                    //ETAT_FD Concerne la classe Lire_Fichier permet de retourner la réponse directement à celle ci
                    if(Reponse.contains("FD")) // LIGNE QUI FOIRE
                    {
                        try {
                            ETAT_FD = 1;
                            LF.Reception(Reponse);
                        } catch (IOException ex) {
                            System.err.println(ex);
                        }
                    }
                    
                    compteur = 0; //Compteur de perte de connexion réinitialisé quand a nouveau connecté
                    ihm.reception(Reponse);
                    Reponse = "";
                }
                //Traite la perte de connexion avec la carte
                if(!connexion && compteur == 0)
                {
                    ihm.Perte_de_co();
                    Test_OpenPort = false;
                    compteur++;
                }
                
            }
        }
    Voila, en gras, la ligne qui foire

    Donc pour résumer, j'envoie une commande genre FD;:blablalba
    la carte me réponde : FD;biblablo

    donc je test si la réponse contient FD, alors j'envoie LF.Reception(Reponse);
    la réponse, ce qui va enchaîner sur la deuxième ligne, puis la 3eme ainsi de suite jusqu’à (un peut plus de 3000)
    et à la fin, quand les 3000 lignes sont passée (Si elles sont toutes passées)
    je fais un Reset automatique de la carte.

    Voila, je pense avoir mis un peut plus de détails.

    Merci pour le temps que tu consacre à me répondre
    Cordialement, MrShanky

  7. #7
    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
    La seule valeur que je vois assignée à Reponse c'est en fin de boucle, la valeur "", bien après tous les tests. A quel moment Reponse est censé être rempli?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Réponse change quand le SerialPortEvent obtient une réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //Lecture d'évenement qu'on affecte à Reponse
         private SerialPortEventListener listener = new SerialPortEventListener() {
            @Override
            public void serialEvent(SerialPortEvent spe) {
     
               try {
                    if(a == 0) //Pour éviter de recoivoir une chaine Null 
                    {
                        Reponse = serialPort.readString();
                        a++;
                    }
                } catch (SerialPortException ex) {
                    System.err.println(ex);
                }
            }
        };

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Je crois avoir constaté que le problème survient quand je lance deux fois le téléchargement sans avoir fermé l'application.

    J'ai refais une 10ene d'essais sans avoir d'erreur en mettant un systeme de vérouillage du bouton téléchargement apres son utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    try {
                if(compteur_dl == 0)
                {
                    dl.Telecharger();
                    Ouvrir test = new Ouvrir();
                    test.actionPerformed(evt);
                    compteur_dl++;
                }
                else
                {
                    JOptionPane.showMessageDialog(this, "Un seul téléchagement est autorisé.\nMerci de relancer l'application pour pouvoir à nouveau télécharger", "Information", 1);
                    jButton39.setEnabled(false);
                }
                
            } catch (SerialPortException ex) {
                System.err.println("ERREUR");
            }

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Bon, apres avoir fait une 40 ene d'essai, avec des combinaisons différentes, je n'ai pas été confronté au probleme de nouveau.
    Je classe en [RESOLU] et je reviendrai en cas de problème !

    Merci en tout cas pour ton aide !
    Cordialement, MrShanky

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Certainement une variable non synchronisée.

    L'intérêt de pas montrer le code concerné, franchement...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. impossible d'utiliser un HWND parent dans un thread
    Par sylvain114d dans le forum Windows
    Réponses: 12
    Dernier message: 23/09/2004, 12h21
  2. Synchronize bloquant dans un thread
    Par bencot dans le forum Langage
    Réponses: 3
    Dernier message: 20/08/2004, 16h42
  3. [Process]Execution de process dans un thread
    Par devjava dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 18/06/2004, 10h34
  4. erreur d'un timer declaré dans un thread
    Par hak5 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/04/2004, 09h20
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25

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