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 :

Thread et application qui plante


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut Thread et application qui plante
    Bonjour,

    Je travaille sur un projet où il y a exportation de fichiers d'un format dans un autre.

    Les méthodes d'exportation ne me sont pas accessibles, et il arrive que selon les fichiers à exporter, l'application "plante" à cause de ces méthodes : l'exportation prend un temps infini et ne renvoie rien.

    Je voudrait savoir s'il existe un façon de faire qui puisse prévenir l'utilisateur du bug, voire, mieux, de lui permettre de stopper la méthode qui plante.

    J'ai pensé à mettre les méthodes à risque dans des Thread à part, et dans le Thread principal, écrire une méthode permettant de stopper le Thread à part.

    Seulement, la plupart des méthodes permettant de mettre en pause ou de stopper les Thread partent du principe que le Thread vérifie périodiquement une variable (que le Thread principal transforme lors de l'arret). Si ma méthode plante, tout se passe comme si le Thread à stopper entrait dans une boucle infinie, (genre while(true) {}) et ne pourrait plus vérifier l'état de cette variable.

    Quelqu'un aurait-il une idée pour résoudre mon problème?

    Je vous remercie vivement de vos aides et conseils ;-)

    EDIT: J'ai pensé à un Timer qui vérifie périodiquement si le Thread à part et toujours alive, et si au bout d'un long moment, c'est toujours le cas, afficher un message pour avertir l'utilisateur. Mais je ne vois toujours pas comment stopper le Thread à part et commencer une nouvelle tâche...

  2. #2
    Membre expérimenté Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221

  3. #3
    ndp
    ndp est déconnecté
    Membre expérimenté Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Par défaut
    salut,

    est-ce que tu peux chercher l'origine du bug?
    exp: tue le process java, recupere le thread dump.

  4. #4
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Salut,

    Je comprends pas ce que tu veux dire par "tue le process java" "récupère le Thread dump", je suis relativement novice en programmation :-S

    Pourrais-tu être plus explicite?

    Merci :-)

  5. #5
    ndp
    ndp est déconnecté
    Membre expérimenté Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Par défaut
    l'idee est la suivante: ton programme bloque et il faut determiner ou est-ce qu'il bloque.

    il bloque parce qu'un thread bloque (peut etre en attente d'un lock,d'une operation d'I/O...)
    Pour savoir ca, tu peux examiner l'etat de l'ensemble des threads a un moment donne (stack trace,etat vis a vis des verrous) ---> c'est ca le thread dump

    Une facon de recuperer le thread dump, c'est d'envoyer un signal au processus java qui tourne, pour l'arreter. Et avant de s'arreter, il y a des chances qu'il produise un thread dump (ie: l'etat de tous les threads au moment ou il s'est arrete). En gros, tu tues le processus java que tu as demarrer pour lancer ton appli

  6. #6
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    D'accord.

    Mais le problème est que je ne peux pas toucher aux méthodes d'exportation, sinon, j'aurais pu me débrouiller de mettre une condition quelque part.

    Il faut donc que je fasse avec le fait que le Thread qui gouverne l'action d'exportation peut planter.

    Ce que je pense faire au final, c'est de mettre la méthode à risque dans un Thread que je déclare Daemon (il s'arrêtera lorsqu'il aura exporter mes fichiers ou bien s'il plante à la fermeture de l'application) et si le Thread reste en vie trop longtemps (temps mesuré avec un Timer), alors il en lance un autre qui prend le relai.

    Voilà!!!

    Il me reste plus qu'à programmer tout ça :-S

    Merci en tout cas à tous les deux pour vos conseils :-)

Discussions similaires

  1. Application qui plante au lancement (ok sur l'émulateur)
    Par benthebest dans le forum Android
    Réponses: 10
    Dernier message: 03/12/2011, 23h13
  2. Application qui plante (quitter, click sur listeView)
    Par jonathantarabbia dans le forum Android
    Réponses: 20
    Dernier message: 17/01/2011, 13h36
  3. [WD15] Application qui plante uniquement sur un poste
    Par mik3.42 dans le forum WinDev
    Réponses: 3
    Dernier message: 09/04/2010, 09h38
  4. Application qui plante à cause des tabs ?
    Par astrolus dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/05/2008, 22h54
  5. Application qui plante quand lancé par sans débugage
    Par bossun dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 12/07/2007, 12h08

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