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

JSF Java Discussion :

Bouton pour stopper un traitement


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Par défaut Bouton pour stopper un traitement
    Bonjour,
    j'ai une table qui contient une liste d'élements et deux boutons devant chaque ligne pour démarrer et stopper un traitement

    le problème c'est que je peux démarrer mon thread normalement mais une fois que je clique sur pause pour le stopper, ça ne marche pas.
    le bouton démarrer est destiné pour executer la methode suivante:
    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
     
     public void editValide(CompagneBean compagne) {
            selectedCompagne=compagne;
            Connection conn = Database1.getConnection();
            System.out.println("--------- this ------ " + selectedCompagne.relatedtable);
     
            String table=selectedCompagne.relatedtable;
            HttpSession session = com.beans.Util.getSession();
     
     
             session.setAttribute("table", selectedCompagne.relatedtable);
     
     
             RunThread r= new RunThread(table);
             Thread t = new Thread(r);
             t.run();
     
            FacesMessage message = new FacesMessage("Success !!!", "votre compagne pour  " + this.user + " a été validée avec succès ");
     
                FacesContext.getCurrentInstance().addMessage(null, message);
        }
    comme on peut le voir icic on a démarré le thread RunThread avec succès.mais si je veux cliquer sur pause, comment fait-on pour faire référence à mon thread qui est déjà en cours pour pouvoir appeler la méthode t.stop()?

    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
    <p:column  width="100px">
                        <f:facet name="header">  
                            <h:outputText value="valider" />  
                        </f:facet>
                        <p:commandButton value="valider" actionListener="#{compagne.editValide(o)}"  >
     
                        </p:commandButton>
                    </p:column>
     
                     <p:column  width="100px">
                        <f:facet name="header">  
                            <h:outputText value="pause" />  
                        </f:facet>
                         <p:commandButton value="pause" actionListener="#{compagne.stopp}"  >
     
                        </p:commandButton>
                    </p:column>

    merci

  2. #2
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Par défaut
    Une piste peut être:

    - Get thread Id après la création du thread, et stocker le qlq part,
    - Après, get thread by Id, pour récupérer le thread et puis stopper le.

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Par défaut
    merci pour votre réponse mais si je fais tout d'abord un
    je vais récupérér l'id de mon thread et par la suite je le récupére dans une variable session (session.setAttribute("id",id))
    mais si dans une autre methode qui n'est autre que
    comment je fais pour appeler la methode thread.stop() sur mon ancien thread que j'ai déjà sauvegardé son id?

    y-a til une autre méthode faire une pause pour un thread

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,
    Y'a une réponse toute simple à ton besoin:
    -Tu commences par mettre ton managegBean en scope session
    -Tu rends ton attribut Tread en attribut membre de ton ManagedBean
    Comme suit :
    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
    public class TonManagedBeanEnScopeSession{
    private RunThread r=null;
    ...
    
    public void editValide(CompagneBean compagne) {
            selectedCompagne=compagne;
            Connection conn = Database1.getConnection();
            System.out.println("--------- this ------ " + selectedCompagne.relatedtable);
     
            String table=selectedCompagne.relatedtable;
            HttpSession session = com.beans.Util.getSession();
     
     
             session.setAttribute("table", selectedCompagne.relatedtable);
     
     
              r= new RunThread(table);
             Thread t = new Thread(r);
             t.run();
     
            FacesMessage message = new FacesMessage("Success !!!", "votre compagne pour  " + this.user + " a été validée avec succès ");
     
                FacesContext.getCurrentInstance().addMessage(null, message);
        }
    ...
    public void stopp(){
    r.stop();
    }

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Par défaut
    merci pour votre réponse mais r implemente l'interface runnable donc on ne peut pas faire et meme si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Thread t= new Thread(r)
    t.stop()
    ça ne marchera pas vu que ce n'est pas le meme thread

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    C'etait plus l'idée à developper afin de répondre à ton besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class TonManagedBeanEnScopeSession{
    private RunThread r=null;
    Thread t =null;
    ...
    r= new RunThread(table);
    t= new Thread(r);
    t.run();
    ...
    //Plus loin
    t.stop();

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Par défaut
    Bonjour,

    Pouvez vous essayer ce code (j'ai pas testé, mais vite trouvé)?
    ThreadGroup currentGroup =
    Thread.currentThread().getThreadGroup();
    int noThreads = currentGroup.activeCount();
    Thread[] lstThreads = new Thread[noThreads];
    currentGroup.enumerate(lstThreads);
    for (int i = 0; i < noThreads; i++)
    System.out.println("Thread " + i + " = "
    + lstThreads[i].getId());

    Mettez le après le code t.start().
    Puis mettez le dans la méthode stop de ton bean.

    L'idée c'est de voir si ton bean gère les même threads ou pas, et pour trouver l'id sauvegardé de votre thread.

    Je pense que votre bean sera mieux en session scope que request scope.

Discussions similaires

  1. Bouton pour stopper une macro
    Par Kestion100 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/05/2015, 20h18
  2. Gestion des erreurs pour stopper le traitement
    Par DEMMAR dans le forum SAS Base
    Réponses: 3
    Dernier message: 20/04/2011, 15h21
  3. Bouton pour interrompre traitement
    Par pjmorce dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 26/02/2009, 14h11
  4. Bouton "cancel" pour stopper des macros
    Par primax dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/08/2007, 15h42
  5. Besoin d'une idée pour stopper un traitement
    Par Yannick_from_31 dans le forum Général Java
    Réponses: 5
    Dernier message: 01/06/2007, 12h27

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