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

avec Java Discussion :

problème lors d'utilisation thread


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 172
    Points : 55
    Points
    55
    Par défaut problème lors d'utilisation thread
    bonsoir à tout le monde,
    j'ai déjà ouvert une discussion à propos de mon problème mais dommage je n'arrive pas à lever le problème, pour cela j'ai décidée de réecrire mais d'une façon plus claire:


    mon problème que je veux calculer la vitesse d'un point en mouvement, pour cela j'ai besoin de calculer à t=0 sa distance minimale par rapport à un point connu, puis recalculer à t=1s sa distance minimale par rapport au point point connu. donc j'ai utilisée un thread j'ai implémentée l'iterface runnable dans mon code, j'ai crée une instance de ce thread dans la méthode affichevitesse(), puis j'ai activée ce thread pour qu'il puisse calculer la distance min à t=0 puis il se met en attente jusqu'à 1s pour qu'il reprend le calcule puis il se met en état mort, sachant que j'ai besoin que le programme principale se met lui aussi en attente jusqu'à que le thread lui donne les deux valeurs min à t=0 puis à t=1 pour qu'il puisse calculer la vitesse.
    alors mon problème est que tjr il y a une exception (qui est en rouge) il m'indique java.lang.NullPointerException, comme s'il le thread n'a rien effectuer (distancemin0 et distancemin1 sont null) ou bien comme si le programme à poursuit son éxécution tandis que le thread est encore en attente, càd distancemin1 est null à cet étape.
    j'ai pas trouvée une solution sachant que je ne maitrise pas bien java ni thread.
    merci d'avance pour votre aide j'en ai besoin.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 45
    Points
    45
    Par défaut
    Je ne sais pas comment cela peut fonctionner avec t.start et non t.start();
    cela dit, essais avec t.run(). La méthode run() oblige ton processus appelant d'attendre la fin de l'exécution de ton thread avant de poursuivre. Ce qui n'est pas le cas de start() qui parallélise les éxecutions.

  3. #3
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Bonjour,
    je confirme ta version: tu fais appel aux attributs distancemin0 et distancemin1 sans être sur qu'ils soient dejà remplis, puisque ton programme continue en parallèle de ta méthode run.
    Si tu veux attendre la fin de l'éxécution, il te suffit d'appeller la méthode t.join() juste après t.start(), ce qui forcera ton programme à attendre la fin du Thread avant de continuer.

    Soit dit en passant, si je comprends bien le but de ton programme est de lancer la fonction "distanceMinimale" deux fois de suite à 1 seconde d'intervalle.
    Si c'est le cas pourquoi passer par un Thread?
    Le but d'un Thread est d'exécuter une action en parallèle d'une autre, si par exemple tu veux gérer un affichage en même temps qu'un calcul (ce qui ne semble pas être le cas ici).

    Si ton programme ne doit pas continuer à s'exécuter avant la fin d'un seul Thread, ce thread n'a pas vraiment de raison d'être...

    edit:t.join(), pas t.wait()... Jidéfix cours se faire fouetter
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par Skypiea Voir le message
    Je ne sais pas comment cela peut fonctionner avec t.start et non t.start();
    cela dit, essais avec t.run(). La méthode run() oblige ton processus appelant d'attendre la fin de l'exécution de ton thread avant de poursuivre. Ce qui n'est pas le cas de start() qui parallélise les éxecutions.
    Ce qui signifie précisément lancer l'exécution de run() sur le thread en cours, alors qu'il veut la lancer dans un autre thread, seule raison pour laquelle il y a une méthode run() d'ailleurs.

    Ça n'a pas d'intérêt.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/02/2009, 10h10
  2. Réponses: 3
    Dernier message: 16/08/2006, 11h26
  3. Problème lors de l'utilisation de opennreport
    Par willytito dans le forum Access
    Réponses: 1
    Dernier message: 20/07/2006, 22h00
  4. Problème lors de l'utilisation de FOP
    Par llaurentt dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 12/05/2006, 16h49
  5. Réponses: 6
    Dernier message: 20/01/2006, 20h28

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