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

AWT/Swing Java Discussion :

TaskMonitor et JProgressBar


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut TaskMonitor et JProgressBar
    Bonjour,

    Apres plusieurs heures de recherche sur google je viens tenter ma chance sur ce forum.
    Je suis en train de developper un programme Java chargé de crypter/decrypter des donnée selon l'algorithme du RSA. J'ai créé une Desktop Application sous Netbeans pour developper cette application.

    Le cryptage/decryptage des information peut prendre beaucoup de temps en fonction du fichier traité, j'utilise donc une Action Task qui réalise ce processus dans un thread parralele au sein de doInBackground()

    Jusque la tout se passe a merveille, la tache se lance bien, le thread aussi et le programme fait ce qu'il a à faire. Mon problème est que j'aimerai pouvoir afficher l'avancement du processus donc la progress bar mais je ne parvient pas a comprendre pourquoi il ne se passe rien au niveau de cette derniere

    Voila le code:

    Généré par NetBeans, normalement pas besoin d'y toucher (?)
    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
     
    public class RSAProject extends FrameView {
     
        public RSAProject(SingleFrameApplication app) {
            super(app);
     
            initComponents();
     
            // status bar initialization - message timeout, idle icon and busy animation, etc
            ResourceMap resourceMap = getResourceMap();
            int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
            messageTimer = new Timer(messageTimeout, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    statusMessageLabel.setText("");
                }
            });
            messageTimer.setRepeats(false);
            int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
            for (int i = 0; i < busyIcons.length; i++) {
                busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
            }
            busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
                    statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
                }
            });
            idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
            statusAnimationLabel.setIcon(idleIcon);
            progressBar.setVisible(true);
     
            // connecting action tasks to status bar via TaskMonitor
            TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
            taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
                @Override
                public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    String propertyName = evt.getPropertyName();
                    System.out.println(propertyName);
                    if ("started".equals(propertyName)) {
                        if (!busyIconTimer.isRunning()) {
                            statusAnimationLabel.setIcon(busyIcons[0]);
                            busyIconIndex = 0;
                            busyIconTimer.start();
                        }
                        progressBar.setIndeterminate(true);
                    } else if ("done".equals(propertyName)) {
                        busyIconTimer.stop();
                        statusAnimationLabel.setIcon(idleIcon);
                        progressBar.setValue(0);
                    } else if ("message".equals(propertyName)) {
                        String text = (String)(evt.getNewValue());
                        statusMessageLabel.setText((text == null) ? "" : text);
                        messageTimer.restart();
                    } else if ("progress".equals(propertyName)) {
                        int value = (Integer)(evt.getNewValue());
                        progressBar.setIndeterminate(false);
                        progressBar.setValue(value);
                    }
                }
            });
        }
    Le bouton qui appelle la tache
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
        this.startEncrypt().execute;
    }
    Et enfin la tache elle meme
    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
     
        @Action
        public Task startEncrypt() {
            return new StartEncryptTask(getApplication());
        }
     
        private class StartEncryptTask extends Task<Void, Void> {
            StartEncryptTask(org.jdesktop.application.Application app) {
                super(app);
            }
     
            @Override
            protected Void doInBackground() {
                try {
                    //code specifique au cryptage
                }
                catch(java.lang.Exception e) {
                    //code specifique au execptions
                }
     
                return null;
            }
     
            protected void succeeded() {
            }
        }
    Voila, je ne comprend pas d'ou ca peut venir, le TaskMonitor est bien "sur ecoute" et devrait reagir lors de l'apparition d'une tache.
    Quelque chose doit surement m'echapper

    Toute aide sera la bienvenue!
    Merci d'avance!

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Je m'auto répond, la tache n'etait pas prise en compte par le TaskMonitor, voila ce que j'ai modifié.

    Le bouton qui appelle la tache
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
        this.startEncrypt();
    }
    La tache elle meme
    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
     
        @Action
        public Task startEncrypt() {
            StartEncryptTask task = new StartEncryptTask(org.jdesktop.application.Application.getInstance());
     
            ApplicationContext C = getApplication().getContext();
            TaskMonitor M = C.getTaskMonitor();
            TaskService S = C.getTaskService();
            S.execute(task);
            M.setForegroundTask(task);
     
            return task;
        }
     
        private class StartEncryptTask extends Task<Void, Void> {
            StartEncryptTask(org.jdesktop.application.Application app) {
                super(app);
            }
     
            @Override
            protected Void doInBackground() {
                try {
                    //code specifique au cryptage
                }
                catch(java.lang.Exception e) {
                    //code specifique au execptions
                }
     
                return null;
            }
     
            protected void succeeded() {
            }
        }
    Si ca peut en aider certain

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

Discussions similaires

  1. [JProgressBar] Comment l'utiliser
    Par zegota dans le forum Composants
    Réponses: 3
    Dernier message: 01/09/2005, 15h21
  2. Réponses: 5
    Dernier message: 28/07/2005, 16h00
  3. Barre de progression JProgressBar
    Par sixkiller dans le forum Composants
    Réponses: 7
    Dernier message: 08/12/2004, 11h33
  4. [JProgressBar] style de la progressBar
    Par la.musaraigne dans le forum Composants
    Réponses: 5
    Dernier message: 28/10/2004, 16h26
  5. [JProgressBar] Changer la couleur de progression
    Par loul91 dans le forum Composants
    Réponses: 2
    Dernier message: 19/07/2004, 16h10

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