ge17
Messages postés15Date d'inscriptionmercredi 18 juin 2008StatutMembreDernière intervention30 juillet 2008
-
30 juin 2008 à 09:51
ge17
Messages postés15Date d'inscriptionmercredi 18 juin 2008StatutMembreDernière intervention30 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(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..
indiana_jules
Messages postés750Date d'inscriptionmardi 9 mars 2004StatutMembreDernière intervention23 décembre 200822 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)
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.
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.