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 :

Thread, Arrête toi je le veux !


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Par défaut Thread, Arrête toi je le veux !
    Bonjour,
    J'aime pas les threads j'y comprend rien.
    Aidez-moi
    J'ai une gentille appli avec une belle interface graphique. A moment donné, un click vigoureux sur un bouton lance dans un thread un processus de génération complexe et long et dans un autre une barre de progression. Je veux qu'en clickant sur un bouton, je puisse stoper les deux.
    J'ai lu toute la doc que j'ai pu trouvé sur le sujet et je n'en regrette que plus stop() et destroy()
    Je ne comprends pas comme stopper ce Thread. Voici la fonction qui lance le thread de génération
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
          private void compute() {
                progressBar = new Barre();  
                flag = true;
                File tmpFile = null;
            if (!((JEditArea)tabbedPane.getSelectedComponent()).isSaved()){                            
                int n = JOptionPane.showOptionDialog(this,
                    "<html> Your file is unsaved. <br> Would you want to save it ?</html>",
                    "Warning",
                    JOptionPane.YES_NO_OPTION,
                    JOptionPane.WARNING_MESSAGE,
                    null,
                    options,
                    options[0]); 
                if (n==JOptionPane.YES_OPTION){
                    saveAsFile(); 
                    currentFile = ((JEditArea)tabbedPane.getSelectedComponent()).getFile();
                } else { // creation du fichier temp
                                              
    
                    currentFile = ((JEditArea)tabbedPane.getSelectedComponent()).createTempfile();   
                }
            } else {
                try {
                    currentFile = ((JEditArea)tabbedPane.getSelectedComponent()).getFile();
                } catch (NullPointerException npe) {
                    System.out.println("Null Pointer Exception");
                }
            }   
             
            (new Thread() {   
                public void run() {
                    
                        
                    while (flag) {                   
                    try {                    
                        File file = getCurrentFile();
                        TestParser testParser = new TestParser();             
                        if (file.canRead()){                        
                            try {
                                testParser.process(file);
                                stopBar();
                                displayInfo("ICAr generate with sucess");        
                            } catch (cdi.amparser.HandlerException he) {
                                System.out.println(he.getMessage());
                                he.printStackTrace();
                                stopBar();
                                displayInfo("Compilation Error");    
                            }
                            catch (Exception e) {
                            System.out.println(e.getMessage());
                            stopBar();
                            displayInfo("Compilation Error");  
                            
                        }
                    }
                  } catch (NullPointerException npe) {
                    stopBar();               
               }                              
          
                }
                }
                 
            }).start();  
           try {
                tmpFile.delete();
           } catch (NullPointerException npe) {}
        }
    (Le while marche pas bien evidemment je le sais bien)
    Merci d'avance (encore)

    Lain

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    ben quand tu va passer ton flag a "false", ton thread va sortir de la boucle et executer les instructions qui suivent puis se terminer.

    Ca ne te va pas comme ca ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Par défaut
    Ben non.
    Pourquoi mon Thread bouclerait avant la fin ? Il boucle pas.
    Il fait gentiment toutes ces instructions sequentielement.
    Le while est une solution que j'ai trouvé de ci de là mais c'est bon que pour les process de type Timer ... :-(
    Je veux l'interrompre au milieu de la séquence.

  4. #4
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    a la premiere ligne je vois :
    while( flag )

    et il boucle pas ?
    tu peux tester l'intruction critique par un if(flag) exec...
    tu inhibes l'instruction comme ca, apres les quelques instructions executées ne vont pas ralentir le process...
    Sinon je ne vois pas

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Par défaut
    Oublie le while
    Il boucle dans la mesure où une boucle boucle
    Mais moi je veux le stopper AVANT la fin de l'itération !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Par défaut
    Y aurait-il moyen que je m'en sorte en utilisant la classe Runtime plutôt qu'un Thread ?

Discussions similaires

  1. [thread] Arrêt d'un thread en sommeil
    Par ChipsterJulien dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 06/06/2010, 16h04
  2. Réponses: 2
    Dernier message: 05/03/2007, 16h45
  3. Réponses: 7
    Dernier message: 18/09/2006, 22h01
  4. Arrêt de thread
    Par mr.saucisse dans le forum MFC
    Réponses: 5
    Dernier message: 29/01/2006, 21h02
  5. Réponses: 8
    Dernier message: 19/01/2006, 15h00

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