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

Concurrence et multi-thread Java Discussion :

probleme avec thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut probleme avec thread
    Salut,
    j'ai une fonction qui permet d'afficher un jtreetable dans un split et vue la quantité des données le temps d'affichage est assez grand c'est pour cela que j'ai utilisé un thread, mais le probleme c'est que lorsque je debug mode debugage avec F8 le complateur n'entre pas dans le corps de la fonction run()
    d'apres vous le pbm !!!! c'est koi
    voila le code :

    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
        private void addTree() { 
            new Thread( new Runnable() {
              public void run() { 
                  final Vector TREE = mDBaccess.getTreeVecteur(mTreeStructure);
                  System.out.println(" threads " + mTreeStructure);
                  mTreeTablePanel = new TreeTablePanel(TREE, mTreeNbreCol, mTreeIndex, cNames, cTypes); 
                  JOptionPane.showMessageDialog(null,"123456789");
                  mTreeTablePanel.mTreeTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                  mTreeTablePanel.mTreeTable.getColumnModel().getColumn(0).setPreferredWidth(100);
                  mTreeTablePanel.mTreeTable.getColumnModel().getColumn(1).setPreferredWidth(130);
                  mTreeTablePanel.mTreeTable.getTableHeader().setReorderingAllowed(false);
                  mTreeTablePanel.collapseAll();
                  mJSplitPane.setOneTouchExpandable(true);
                  mJSplitPane.setDividerLocation(235);   
              }
              }).start();
     
            mJSplitPane.setLeftComponent(mTreeTablePanel);
            mJSplitPane.setRightComponent(mJPanelData);
            PanelCompteEspeceView.this.add(mJSplitPane, BorderLayout.CENTER);
            PanelCompteEspeceView.this.add(navBar, BorderLayout.NORTH);
        }
    Merci pour votre aide !!!

  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
    Ca dépend de ton débuggeur. T'as bien mis un break-point dans la fonction run()? Parce que, si tu fais du pas à pas, le débogueur se concentre uniquement sur le thread courant, les autres thread sont soit continués normalement, soit mis en attente sur le coté et faut aller dans la liste des threads pour le choisir.

  3. #3
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    Salut,
    donc pour le cas ici, j'ai mis les breakpoints pour la fonction run et pour l'instruction final Vector cette fois ci sa marche mais il se plante
    sachant que lorsque j'affiche un message de controle et j'éxecute l'application il ne passe pas dans le corps de la méthode run()?

    Merci de m'aider. l'objectif comme j'ai dis c'est l'accéleration de chargement des données ainsi que l'affichage de la maquette pour quelle ne soit pas figée.

  4. #4
    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
    Citation Envoyé par opensource Voir le message
    sachant que lorsque j'affiche un message de controle et j'éxecute l'application il ne passe pas dans le corps de la méthode run()?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public void run() { 
                  final Vector TREE = mDBaccess.getTreeVecteur(mTreeStructure);
                  System.out.println(" threads " + mTreeStructure);
    Vu l'endroit de ton system.out, on ne peut donc qu'en conclure que c'est l'appel mDBAccess.getTreeVecteur ou l'appel de mTreeStructure.toString() qui déclenche une exception....
    Entoure le contenu de ton run avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try{
     //....
    } catch (Throwable t){
        t.printStackTrace();
    }

  5. #5
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    resalut,
    pour la solution proposée - celle de try ... catch(), n'a pas assez d'effet sur le temps de reponse de la page, les operations qui se font avec cette fonction sont chargement des données sous forme de vecteur apres la construction de tree avec ces données, la construction de tree demande un peu de temps selon la quantite des données voila le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Vecteur des données
    final Vector TREE = mDBaccess.getTreeVecteur(mTreeStructure);
                System.out.println(" threads " + mTreeStructure);
    // construction de treetable
                mTreeTablePanel = new TreeTablePanel(TREE, mTreeNbreCol, mTreeIndex, cNames, cTypes);
    et Merci

  6. #6
    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
    Citation Envoyé par opensource Voir le message
    resalut,
    pour la solution proposée - celle de try ... catch(), n'a pas assez d'effet sur le temps de reponse de la page
    Et c'est pas son but non plus, son but c'est de choper tes exceptions et les afficher :s Dis nous donc ce que tu récupère comme exception (car une fois le thread lancé, si tu n'arrive pas sur le system.out.println, y a que 2 possibilités. La première, c'est que t'aie une exception qui interrompt le travail du thread (d'ou le try catch), la deuxième c'est que ta méthode ne retourne jamais (boucle infinie, wait() sans notify(), etc).

  7. #7
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    la methode n'est pas une boucle infini, mais la remarque c'est que il y a quelques chose qui bloque et tue le travail de threads. pour le try et le catch je pense qu'il n 'y a pas d'exception à gérer.
    Merci pour l'aide

  8. #8
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par opensource Voir le message
    la methode n'est pas une boucle infini, mais la remarque c'est que il y a quelques chose qui bloque et tue le travail de threads. pour le try et le catch je pense qu'il n 'y a pas d'exception à gérer.
    Merci pour l'aide
    le but n'est pas de gérer l'exception juste de debugger
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  9. #9
    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
    Et la seule chose qui peut interrompre le travail d'un thread, c'est une exception, une boucle infinie ou un wait() sans notify()

Discussions similaires

  1. probleme avec thread
    Par moufid dans le forum C#
    Réponses: 10
    Dernier message: 11/01/2011, 16h27
  2. probleme avec thread
    Par TrollTop dans le forum C++/CLI
    Réponses: 3
    Dernier message: 27/02/2009, 14h15
  3. probleme avec thread en java
    Par manelinfo dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 20/05/2007, 18h27
  4. Des problemes avec ces threads <pthread.h>
    Par nasamad dans le forum GTK+ avec C & C++
    Réponses: 26
    Dernier message: 07/07/2006, 12h46
  5. [Thread] Probleme avec mon Timer
    Par Nico66 dans le forum EDT/SwingWorker
    Réponses: 10
    Dernier message: 02/06/2005, 17h10

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