begin process at 2012 02 15 14:23:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Général

 > 

Blocage sur boucle for


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Blocage sur boucle for

lundi 30 juin 2008 à 09:51:07 | Blocage sur boucle for

ge17

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<Poste> 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.

lundi 30 juin 2008 à 12:50:32 | Re : Blocage sur boucle for

indiana_jules

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à

[#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises]
[#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]
lundi 30 juin 2008 à 13:42:34 | Re : Blocage sur boucle for

ge17

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.
lundi 30 juin 2008 à 13:45:50 | Re : Blocage sur boucle for

Gael99

Salut,

je pense que le mode debug de eclipse est parfait dans ta situation.
lundi 30 juin 2008 à 13:47:30 | Re : Blocage sur boucle for

ge17

Pardon, je n'ai pas préciser que je programme sous Netbeans
lundi 30 juin 2008 à 15:42:21 | Re : Blocage sur boucle for

ge17

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 :
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.
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.

            



Cette discussion est classée dans : variable, out, println, cursor, if


Répondre à ce message

Sujets en rapport avec ce message

valeur contenu dans une variable HTML [ par piscuce ] Salut JavaWorld...Voici un bout de code d'une petite sevlet que j'aimerais developper...stmtaxe = con.createStatement(); //Executer une requete SQL besoin aide sur ce prg [ par domxaline ] bonjour voilà mon prg j'ai besoin votre aide! import sdz1.Lire; public class toi { public static void main(String[]args) { System.out.println("Ce label defaut is never explicitly referenced [ par domxaline ] bonjour j'ecris le ^prg suivant: import sdz1.Lire; public class essaie { public static void main (String [] args) { System.out.println("Vous vou Listing de répertoire récursif récalcitrant! [ par oulanos ] Bonjour, je viens vers vous parce que je galère depuis un petit moment sur un code qui va apparaitre tout con pour la plupart d'entre vous mais.. je g void is an invalid type for the variable main [ par domxaline ] public class essaie { { public static void main (String [] args) { int nombre1 = (int) (Math.random() * 51); System.out.println("nombre au hasard entr pb de SAX [ par d12ahm ] bonjour a t je suis debutant sur java j'crée un parser saxpour lire un fichier xml sous jbuilder9 [color=red]voila le code:[/color] //*************** afficher ce menu [ par domxaline ] Bonjour, je vais affiche le menu suivant, quelqu"un peut m'aider s'il vous plaît [code=java] package Mesessaies; public class Toi1 { public sta switch en java [ par loveislam ] salut les amis j'ai beaucoup recherché avant de poser la question mais en vain j'espère trouver la soulution chez vous alors je veux faire un petit p urgent [ par bawilar ] je souhaiterais avoir un eclaircissement sur un programme en java svp voici le code: import java.util.*; public class Boucle { public static v programmation réseau "client/serveur" [ par sana83 ] je suis debutante en programmation réseau je veut faire un programme qui envoi des messages entre 1 client et 1 serveur j'ai le code : [b]code clien


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,195 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales