Blocage sur boucle for

ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008 - 30 juin 2008 à 09:51
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008 - 30 juin 2008 à 15:42
Bonjour.


J'ai un problème au niveau d'une boucle for dans une de mes class.
Dans cette classe j'exécute, lors d'un clique sur un bouton, la méthode suivante :


Code :
 public void installerAll(){
        Variable.out.println("100");  
        String sup="";
        Variable.out.println("101");
        String comp=null;
        Variable.out.println("102");
        for(Enumeration et=retouracceuil.postes_selectionnes.elements();et.hasMoreElements();){
            if(comp==null){
                comp=et.nextElement().getGroupe().getNom();
            }else if(!comp.equals(et.nextElement().getGroupe().getNom())){
                sup="ATTENTION il y a plus d'un groupes différents.\n";
                break;
            }
        }
        Variable.out.println("103");
        int choix = JOptionPane.showConfirmDialog(null,sup+"Êtes vous sûr d'installer les tps sur tout les PC ?", "Confirmation",
                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);   /**Affichage de la fenêtre de dialogue demandant la confirmation d'installation **/
        Variable.out.println("104");
        if (choix == JOptionPane.YES_OPTION)         /**Gestion de l'ajout et de la suppression des groupes en graphique et dans le fichier txt**/
        {
            Variable.out.println("105");
            Object[] options = { Variable.etatName[Variable.OPERATIONEL], Variable.etatName[Variable.TEMP] };
            Variable.out.println("106");
            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            Variable.out.println("107");
            MyTableModel md=(MyTableModel)table.getModel();
            Variable.out.println("108");
            for(int i=0;i<md.getRowCount();i++){
                
                if((md.getValueAt(i,md.getColumnCount()-1)).equals(true)){
                    Variable.out.println("111");
                    TpsRef ref = Variable.baseTps.get((String)md.getValueAt(i,1));
                    Variable.out.println("112");
                    if(ref!=null){
                       
                        if(ref.getEtat()==Variable.NEW){
                            Object choix2 = JOptionPane.showInputDialog(null,"Choix pour le tps : "+ref.getNameTps(),"Warning",
                                    JOptionPane.INFORMATION_MESSAGE,null,options,options[0]);
                            if(choix2!=null){
                                Variable.out.println("113");
                                int oldEtat=ref.getEtat();
                                Variable.out.println("114");
                                int newEtat=Variable.nameEtat(choix2.toString());
                                Variable.out.println("115");
                                String subTps=ref.getNameTps().replaceFirst("^[\\d]+-","");
                                Variable.out.println("116");                             
                                String sourceZip=Variable.subRep(subTps,ref.getInstallDir());
                                Variable.out.println("117");
                                String destZip=Variable.modifInstall(sourceZip,oldEtat,newEtat);
                                Variable.out.println("118");
                                if(destZip==null){
                                    Variable.err.println("Modification impossible car pas de dossier de référence pour "+Variable.etatName[newEtat]);
//                                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                                    continue;
                                }else if(destZip.equals("")){
                                    Variable.err.println("Modification impossible car le fichier d'install n'est pas dans un dossier de référence pour "+Variable.etatName[oldEtat]);
                                    continue;
                                }
                                Variable.out.println(sourceZip+" -> "+destZip);
                                if(!new File(destZip.toUpperCase().replaceAll("\\\\\\w*.ZIP","\\\")).exists()){
                                    if(!new File(destZip.replaceAll("[^\\\\]+\\\\$","")).exists()){
                                        if(!new File(destZip.replaceAll("[^\\\\]+\\\\$","")).mkdirs()){
                                            Variable.err.println("Erreur de création de répertoire : "+destZip);
//                                        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                                            continue;
                                        }
                                    }
                                   
                                }
                                Variable.out.println("119");
                                if(new File(sourceZip).renameTo(new File(destZip))){
                                    Variable.out.println("120");
                                    ref.setInstallDir(Variable.modifInstall(ref.getInstallDir(),oldEtat,newEtat));
                                    Variable.out.println("121");
                                    ref.setEtat(newEtat);
                                    Variable.out.println("122");
                                    md.setValueAt(Variable.etatName[newEtat],i,md.getColumnCount()-3);
                                    Variable.out.println("123");
//                                    this.installRef.setText(ref.getInstallDir());
                                    String s=Variable.deleteRec(sourceZip.replaceAll("[^\\\\]+\\\\$",""),sourceZip);
                                    Variable.out.println("124");
                                    s = s!=null ? s : sourceZip;
                                    Variable.out.println("125");
                                    Variable.out.println("Fichier/Dossier supprimé : "+s);
                                    Variable.out.println("Fichier déplacé : "+sourceZip+" -> "+destZip);
                                    Variable.saveRef();
                                }else{
                                    Variable.err.println("Erreur pour déplacer le fichier : "+sourceZip+" -> "+destZip);
//                                    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                                    continue;
                                }
                            }else{
                                Variable.err.println("Pas de choix pour le tps "+ref.getNameTps());
                                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                                continue;
                            }
                           
                        }
 
                        Variable.out.println("Install auto de ["+ref.getNameTps()+"]");
                        for(int k=3;k<md.getColumnCount()-4;k++){
                            Variable.out.println("126");
                            Object []temp = ((Cell)md.getValueAt(i,k)).o;
                            Variable.out.println("127");
                            String name = (String)temp[0];
                            Variable.out.println("128");
                            Poste p = (Poste)temp[1];
                            Variable.out.println("129");
                            Vector<TpsPoste> t=(Vector<TpsPoste>)temp[2];
                            Variable.out.println("130");
                            if(t==null){
                               
                                p.installTps(name);
                               
                            }else{
                                if(!p.isTpsRef(name)){
                                    Variable.out.println(md.getColumnName(k)+" to REF : "+(String)md.getValueAt(i,1));
                                    p.addRef(name);
                                   
                                }
                            }
                        }
                    }else{
                        Variable.err.println("Impossible d'installer un programme qui n'est pas une ref : ["+(String)md.getValueAt(i,1)+"]");
                    }
                    md.setValueAt(false,i,md.getColumnCount()-1);
                }
            }
            md.fireTableDataChanged();
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        }
       
    }


et tout marche parfaitement. Maintenant je veux exécuter de la même manière cette fonction en l'appelant d'une autre class par le biais d'un clique sur un sous-item ("installer").
Donc je fais tout ce qu'il faut pour. Je crée une instance de la première class ou se trouve la fonction, je renseigne le constructeur de la seconde class avec le nouvel attribut.
Mon programme d'appel est le suivant :


Code :
 
 public class GestionInstaller implements ActionListener
    {   
       /**
        * Methode de recherche
        * @param ev ActionEvent
        */
        public void actionPerformed(ActionEvent ev)
            {
               Variable.out.println("4");
               Page3 inst= new Page3(retouracceuil);
               Variable.out.println("4");
               inst.installerAll();
               Variable.out.println("Le bouron 'Installer' a été cliqué");
            }
    }

Mais voilà lorsque je clique sur le sous-item pour lancer la fonction, le programme se lance correctement (il fait le lien entre les deux class) mais s'arrête au niveau de la boucle for :


Code :
 
for(int i=0;i<md.getRowCount();i++){

et il ne veut pas franchir cette ligne et je ne vois pas pk. Pourtant, il ne me semble pas que cette fonction dépende d'autre fonctions présentent dans la même class. Si quelqu'un avait une idée sur le problème..


Merci d'avance.

5 réponses

indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
30 juin 2008 à 12:50
Salut

Ton programme te lance-t-il une erreur ? Si oui, peut-être que cela est dû à une mauvaise initialisation de la variable. Sinon, vérifier que la taille de ton tableau est bien correcte (>0). De plus, mets un system.out.println(...) aprés ta boucle pour vérifier qu'il passe bien aprés. Dans le cas contraire, il y a un probléme de mutex sur ta variable (probléme de synchronisation)

voili voilà

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte
0
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008
30 juin 2008 à 13:42
Salut indiana_jules.

Premièrement mon programme ne me lance pas d'erreurs.
Secondo, j'ai placé un system.out.println(...) aprés la boucle et après exécution, le programme passe bien après la boucle.
Enfin peux-tu m'expliquer la manip qu'il faut faire pour vérifier que la taille de mon tableau est bien correcte (>0) stp.

Merci d'avance.
0
Gael99 Messages postés 5 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 8 juillet 2008
30 juin 2008 à 13:45
Salut,

je pense que le mode debug de eclipse est parfait dans ta situation.
0
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008
30 juin 2008 à 13:47
Pardon, je n'ai pas préciser que je programme sous Netbeans
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ge17 Messages postés 15 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 30 juillet 2008
30 juin 2008 à 15:42
Salut indiana_jules.

Citation: Sinon, vérifier que la taille de ton tableau est bien correcte (>0)

bon jme suis débrouillé en insérant un println comme ceci :
<!-- BEGIN TEMPLATE: bbcode_code -->

Code : 
for(int i=0;i<md.getRowCount();i++){
                Variable.out.println("pp :" + i); 
                if((md.getValueAt(i,md.getColumnCount()-1)).equals(true)){
                    Variable.out.println("111");
                    TpsRef ref = Variable.baseTps.get((String)md.getValueAt(i,1));
                    Variable.out.println("112");
                    if(ref!=null){
                    .
                    .
                    .
Code 

Au final la valeur de "md.getRowCount()" est de 184

Puisque lorsque j'utilise le programme d'appel situé dans la même class que la méthode à exécuter (programme qui marche) je m'apercoit en suivant les valeurs de "i" que :

Au bout de 33 cycles de la boucle on vient récupérer les machines sur les lesquels on doit installer des programmes.
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

Variable.out.println("Install auto de ["+ref.getNameTps()+"]");
                        for(int k=3;k<md.getColumnCount()-4;k++){
                            Variable.out.println("126");
                            Object []temp = ((Cell)md.getValueAt(i,k)).o; Variable.out.println("127");
                            String name = (String)temp[0];
                            Variable.out.println("128");
                            Poste p = (Poste)temp[1];
                            Variable.out.println("129");
                            Vector<TpsPoste> t=(Vector<TpsPoste>)temp[2];
                            
                            if(t==null){
                               
                                p.installTps(name);
                               
                            }else{
                                if(!p.isTpsRef(name)){
                                    Variable.out.println(md.getColumnName(k)+" to REF : "+(String)md.getValueAt(i,1));
                                    p.addRef(name);
                                   
                                }
                            }
                        }
Code 

Et que 150 cycles après, on sort de la boucle for

Alors que quand j'utilise le programme d'appel situé dans une autre class que celle où ce trouve la méthode à exécuter, le programme fait ses 184 cycles sans avoir rien fait pendant (il ne se passe rien au bout de 33 cycles)

Pourtant le nombre de cycles est le même pour les deux cas. Je ne sais pas pk au bout de 33 cycles le programme ne va aps identifié les machines où seront installés les programmes.

            
0
Rejoignez-nous