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

avec Java Discussion :

ordre d'exécution d'instructions incohérent


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 19
    Points
    19
    Par défaut ordre d'exécution d'instructions incohérent
    bonjour

    les instructions de mon programmes ne s'exécutent pas dans l'ordre prévu...

    dans l'action event de mon menu "Ouvrir" j'ai 3 instructions dans l'ordre:

    - un File Chooser

    - enableBoutons(true); qui active certains menus.

    - et décompresse(file); qui décompresse l'archive choisie.

    le problème, c'est que le programme attend d'avoir décompressé tous les fichiers pour lancer enableBoutons() alors qu'il est avant décompresse(file)

    franchement je comprend pas.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Points : 192
    Points
    192
    Par défaut
    Bonjour.

    Citation Envoyé par ionone Voir le message
    franchement je comprend pas.
    Nous non plus, sans code...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ou alors ça sent le traitement long (décompression) lancé dans l'EDT éventuellement, qui fait que la vue est raffraichie à la fin. Mais comme a dit gulain : montre nous ton code

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Open menu:
    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
        private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                             
     
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(this);
            if(returnVal == JFileChooser.APPROVE_OPTION)
            {
                ArchiveFilename = chooser.getSelectedFile().getName();
                ArchiveDirectory = chooser.getSelectedFile().getPath();
                ArchiveDirectory = ArchiveDirectory.substring(0, ArchiveDirectory.length()-ArchiveFilename.length());
     
                System.out.println("Directory " + ArchiveDirectory);
                System.out.println("Filename " + ArchiveFilename);
     
     
     
                panel.tableauSélections = new ArrayList();
     
                boutonsEnable(true); //<- cette instruction s'effectue après décompresse()
     
     
                decompresse(ArchiveDirectory + ArchiveFilename);
            }
        }
    Décompresse:
    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
        private void decompresse(String filename)
        {
     
            try {
                unrar(filename);
            }
            catch (Exception e1) {
                try {
                    unzip(filename);
                }
                catch (Exception e2) {
                    JOptionPane.showMessageDialog(null, "Archive ni RAR ni ZIP", "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
     
        }
    Unrar:
    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
        private void unrar(String filename)
        {
            listeFichiersTemp = new LinkedList();
     
            File f = new File(filename);
     
            Archive a = null;
            try {
                a = new Archive(f);
            } catch (RarException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "Message d'erreur", "RAREXCEPTION 1", JOptionPane.ERROR_MESSAGE);
                return;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "Message d'erreur", "IOEXCEPTION 1", JOptionPane.ERROR_MESSAGE);
                return;
            }
     
            if(a != null){
                a.getMainHeader().print();
                FileHeader fh = a.nextFileHeader();
     
     
                while(fh != null){
                    try {
                        //créer répertoire de sortie
                        String répertoireDeSortie = TempDirectory + f.getName()+"\\";
                        File rs = new File(répertoireDeSortie);
                        rs.mkdirs();
     
                        File out = new File(répertoireDeSortie + fh.getFileNameString().trim());
                        listeFichiersTemp.add(out.getAbsolutePath());  //listeFichiers.get(i));
                        //System.out.println(listeFichiers.get(0));//out.getAbsolutePath());
     
                        FileOutputStream os = new FileOutputStream(out);
                        a.extractFile(fh, os);
                        processFileList2();
                        chargeImages2();
                        os.close();
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        JOptionPane.showMessageDialog(null, "Message d'erreur", "FILENOTFOUND", JOptionPane.ERROR_MESSAGE);
                    } catch (RarException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        JOptionPane.showMessageDialog(null, "Message d'erreur", "RAREXCEPTION 2", JOptionPane.ERROR_MESSAGE);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        JOptionPane.showMessageDialog(null, "Message d'erreur", "IOEXCEPTION 2", JOptionPane.ERROR_MESSAGE);
                    }
                    fh=a.nextFileHeader();
                    }
                }
     
        }

  5. #5
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 572
    Points : 15 539
    Points
    15 539
    Par défaut
    Comme l'a fait remarque Georges7 il s'agit d'un traitement long lancé sur l'EDT. Le code de tous les listeners sont exécutés dans un thread spécial nommé EDT. Ce thread doit gérer toutes les actions de IHM.
    Par contre, pendant que des calculs sont fait sur ce thread, l'intégralité de l'IHM est bloquée. C'est pour cela qu'il ne faut pas exécuter quelque-chose de non immédiat sur l'EDT.

    Tu dois exécuter ton decompresse() dans un thread séparé.

    Pour des infos plus complète sur l'EDT:
    http://gfx.developpez.com/tutoriel/j...ing-threading/
    http://rom.developpez.com/java-swingworker/

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Uther Voir le message
    Comme l'a fait remarque Georges7 il s'agit d'un traitement long lancé sur l'EDT. Le code de tous les listeners sont exécutés dans un thread spécial nommé EDT. Ce thread doit gérer toutes les actions de IHM.
    Par contre, pendant que des calculs sont fait sur ce thread, l'intégralité de l'IHM est bloquée. C'est pour cela qu'il ne faut pas exécuter quelque-chose de non immédiat sur l'EDT.

    Tu dois exécuter ton decompresse() dans un thread séparé.

    Pour des infos plus complète sur l'EDT:
    http://gfx.developpez.com/tutoriel/j...ing-threading/
    http://rom.developpez.com/java-swingworker/
    merci Uther!

    je débute en Java alors mon code est pas forcément tip top

    je vais essayer de décompresser dans un autre thread et de le faire communiquer avec le programme principal..

    encore merci

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

Discussions similaires

  1. ordre d'exécution des instructions !
    Par troumad dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/06/2012, 14h24
  2. Ordre d'exécution de la requête
    Par raf_gug dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/04/2006, 10h30
  3. [telnet] Exécuter des instructions en cas d'echec
    Par xjinh dans le forum Modules
    Réponses: 3
    Dernier message: 15/11/2005, 17h43
  4. Ordre d'exécution dans une jointure externe
    Par Pero dans le forum Langage SQL
    Réponses: 17
    Dernier message: 20/09/2005, 12h22
  5. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39

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