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

Interfaces Graphiques en Java Discussion :

JProgressBar et bloquer la suite de mon programme


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut JProgressBar et bloquer la suite de mon programme
    Bonjour,

    Je dois télécharger des fichiers sur internet. Donc j'ai décidé d'y insérer une petite barre de progression pour indiquer à l'utilisateur que le logiciel n'a pas planté mais qu'il travail ^^
    Le problème est que quand la barre de progression est là et bien mon programme continue de tourner, ce qui pose problème car il n'a pas récupéré tous les fichiers pour pouvoir fonctionner correctement !
    J'ai voulu essayer de "bloquer" le Task avec task.get(); (à côté de task.execute() qui appelle le doInBackGround() ) mais du coup la barre de progression ne s'affiche plus ...
    y a t'il un moyen d'interrompre la suite de mon programme sans bloquer cette fichue barre ?

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // je crée ma barre de progression et je récupère les fichiers en même temps
     BarProgress progressBar = new BarProgress(root, repertorySequences);
     
    // normalement, une fois les fichiers téléchargés, je récupère une liste mais 
    // il me la récupère alors que le téléchargement n'est pas fini ... donc ça coince
    List <Sequence> listSequence = progressBar.getListSequences();
    Voici mon PropertyChange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void propertyChange(PropertyChangeEvent evt) {
            if ("progress".equals(evt.getPropertyName())) {
                    int progress = (Integer) evt.getNewValue();
                    progressBar.setValue(progress);
            }
    }
    Ma classe Task (SwingWorker)

    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
     
     
    class Task extends SwingWorker<Void, Void> {
            public Void doInBackground() throws IOException, SAXException {
                int nbLeaves = root.calcLeafs();
                List<PhyloNode> nodes = root.getAllLeaves(root);
     
                int position = 0;
     
                GenBankSequence genBank = new GenBankSequence();
     
                this.setProgress(0);
     
                while (position < nbLeaves && !isCancelled() && !isDone()) {
     
                    Sequence seq = GenBank.getOnlyAccessionNumber(nodes.get(position), repertorySequence, listSequences);
                    listSequences.add(seq); // je remplie la liste que je veux récupérer à la fin
                    position++; 
                    this.setProgress((position*100)/nbLeaves);
                    System.err.println((position*100)/nbLeaves);
     
                }
                this.setProgress(100);
                return null;
            }
     
            public void done(){
                    frame.dispose();
            }
     
    }
    Si quelqu'un pouvait m'aider je lui en serrais très reconnaissante ^^

  2. #2
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je me demande si le fait que j'utilise SwingWorker n'est pas le problème ... Car ce que j'ai compris, c'est qu'il permet de faire deux choses en parallèle, non ? Du coup je ne dois peut être pas utiliser SwingWorker puisque je ne veux pas que mon logiciel continu de tourner.
    Si c'est le cas, que dois je utiliser ?
    Si c'est pas ça, euuuuh ...

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Les tâches qui doivent s'exécuter après l'exécution du SwingWorker doivent être faites dans le done.

    D'autant plus quand tu dois attendre que le processus soit fini pour attaquer d'autres tâches.

    Est-il une raison précise pour laquelle ces opérations ne devraient pas être réalisées dans le doInBackground ou le done?

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Alors tu as tout à fait raison, tout le reste doit être fait dans le done sinon ça va pas ...
    Du coup je dois réarranger mon code : j'ai créer mon propre listener.
    Ma fenêtre va écouter si la progressMonitor est terminée, et si c'est le cas elle pourra continuer à exécuter mes opérations

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] Plantage de mon programme suite migration vers Windev20
    Par remi82 dans le forum WinDev
    Réponses: 5
    Dernier message: 20/01/2015, 16h57
  2. Réponses: 8
    Dernier message: 30/05/2008, 12h15
  3. Pas de suite à mon programme
    Par gillou4 dans le forum C
    Réponses: 7
    Dernier message: 10/10/2005, 17h42
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 15h52
  5. Réponses: 11
    Dernier message: 17/03/2003, 11h56

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