Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Blocage sur boucle for [ Divers / Général ] (ge17)

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é 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 compatibilité argument File String [ par sido722 ] Mon erreurMafenetre4.java:181: tests(java.io.File) in Mafenetre4 cannot be applied to (java.lang.String) tests(file.getAbsolutePath()); acces au contenu d'un message avec javamail [ par amine hayat ] Bonjour. Voici mon problème.Je suis en train de faire une appli qui doit recevoire et envoyer des emails dans une boîte mail. mon probléme est que je [JMF][RTPManager] probleme de transmission ou de reception de video [ par vdavid1982 ] voila aprés des jours complets de recherche je me suis décidé à demander clairement sur ce forum de l'aide ... je dois réaliser un logiciel de visioco [objectOutputStream] blocage sur le writeObject [ par Frouf85 ] bonjour,je fais deux application communiquant via un reseau et 'utilise pour communiquer les objectInputStream et objectOutputStream.Lors du deuxième question sur action listener [ par niko29940242 ] bjour a tous et a toutesvoila j'ai une ptite kestion sur l'utilisation de actionlistener; en fait j'arive a men servir il nya aucun pb la dessus mais pb Connection : Connection is busy with results for another hstmt [ par kicri ] Je développe en java avec une base de donnée sous sql server.Lors d'une de mes requetes à la base j'ai cette erreur qui se produit assez souvent : Con Problème méthode redefinissante [ par Avidev ] Bonjour, je débute en java, avec l'aide d'un livre,mais je bloque sur un listing :class PrintClass { int x = 0; int y = 1; void printMe() { System.ou Fermeture d'une Socket par le client [ par Yenapa ] Salut a tousJe suis un train de developper une application client serveur, et j'ai un petit soucis avec mes socket:Pour le moment je me connecte avec FileChooser et InputStream compatibilite ? [ par pyrokana ] Bonjour à tous,Je suis debutant en java et j'ai decide de developper une petite appli tres simple pour le boulot seulement je suis bloqué. En effet ,


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.