Gestion exception "stack overflow at line : 0"

ellandebasque Messages postés 24 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 29 septembre 2010 - 26 mars 2004 à 16:54
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 30 mars 2004 à 15:24
Bonjour,
je fais un prog qui affiche des images à partir d'un répertoire donné par le clic sur le treeview. Tout fonctionne bien, sauf lorsque l'on clique comme un malade sur l'arbre, au bout d'un moment le message d'erreur "stack overflow at line : 0". J'utilise un code qui me permet de dire que ce débordement de pile n'est pas dû au nombre d'images à afficher ni à la taille du code qu'il a à mettre en mémoire (n fois). Je pense plus à un pb de gestion des événements. Ceci dit comment régler ce pb ? Comment lever cette exception ? (try catch sur tout le code ?)

Merci de m'aider.
De

7 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
27 mars 2004 à 07:48
Bonjour
ce genre de problème est souvent du à une
fonction que l'on appelle de manière récursive
indéfiniment. je pencherais donc plutôt pour
rechercher une erreur de logique de ce type.
maintenant un petit bout de code nous
aiderait.
Cordialement. Bul.
0
ellandebasque Messages postés 24 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 29 septembre 2010
29 mars 2004 à 09:50
Voici ma fonction permmettant la gestion de l'affichage des images. Cette fonction est appelée sur l'événement clic sur l'arbre. J'ajoute la fonction permettant l'affichage du "picto", qui est appelée depuis cette fonction.

// permet d'afficher les picto d'un répertoire
// création à la volée d'un tableau dans lequel sera affiché les picto
function PrintPictoFromFolder(folder)
{
window.parent.SetWaitCursor(true);

var tabExtensions = getExtensionSelected();

// indice de la colonne courante du tableau
var col = 0;

// largeur/hauteur de la cellule --> Dans le fichier .css

// CellSpacing entre les cellules
var iCellSpacing = "5px";

// objet du tableau
var oCell; // cellule
var oRow; // ligne

while (window.parent.feuillegauche.TreeView.Nodes(window.parent.feuillegauche.TreeView.getAttribute("selectedNodeIndex")).key == folder.Path)
{
var iPictoParCol = getMaxPictoByLine();

viderFrame();
var oFiles = folder.Files;
enumFiles = new Enumerator(oFiles);

var oTable = document.createElement("table");
oTable.style.border = 1;
oTable.cellspacing = iCellSpacing;
oTable.align = "center";
oTable.id = "tImages";
document.body.appendChild(oTable);

var oTBody = document.createElement("tbody");
oTBody.vAlign = "middle";
oTable.appendChild(oTBody);

// variable qui va servir à savoir si l'on affiche une image ou pas
// si on en affiche pas, on met une image nous même pour dire qu'il n'y en a pas
var compteurImages = 0;

for (; !enumFiles.atEnd(); enumFiles.moveNext())
{
setTimeout("", 50);

if (window.parent.feuillegauche.TreeView.Nodes(window.parent.feuillegauche.TreeView.getAttribute("selectedNodeIndex")).key != folder.Path)
{
break;
}
File = enumFiles.item();
if (testExtension(File, tabExtensions) == true)
{
compteurImages++;

// cas où on a pas encore crée de ligne (début de la création)
if (col == 0)
{
oRow = document.createElement("tr");
oTBody.appendChild(oRow);
col++;
}
else
{
// si on arrive au max de picto pour la ligne, on crée une autre ligne
if (col == iPictoParCol + 1)
{
col = 1;
oRow = document.createElement("tr");
oTBody.appendChild(oRow);
}
}

oCell = document.createElement("td");
if (rAffichageGd.value == "true")
oCell.className = "clsCellNormalGd";
else
oCell.className = "clsCellNormalPt";

oCell.setAttribute("cell", oCell);
oCell.attachEvent('onclick', fnOnClickCell);
oCell.attachEvent('ondblclick', fnDblClickCell);
oCell.vAlign = "middle";
oRow.appendChild(oCell);

// on cherche à savoir si on affiche l'extension des fichiers
var bAfficherPicto;
if (bAfficherPicto != true && bAfficherPicto != false)
bAfficherPicto = true;
else
bAfficherPicto = window.dialogArguments.bAfficheExtension;

if (rAffichageGd.value == "true")
var iTailleImage = "100";
else
var iTailleImage = "25";

// ajout d'une image
iImg = new Image;
iImg.src = File.Path;
AttendreFin(iImg);
pictoCreate(iImg, oCell, bAfficherPicto, iTailleImage);

col++;
}
}

window.parent.WndUtl.SendDbgMessage( "Dans PrintPictoFolder : " + window.parent.feuilledroite.document.body.getAttribute("affichageCommence") + "\n" );
if (window.parent.feuillegauche.TreeView.Nodes(window.parent.feuillegauche.TreeView.getAttribute("selectedNodeIndex")).key == folder.Path)
{
break;
}
else
{
if (fso.FolderExists(window.parent.feuillegauche.TreeView.Nodes(window.parent.feuillegauche.TreeView.getAttribute("selectedNodeIndex")).key))
folder = fso.getFolder(window.parent.feuillegauche.TreeView.Nodes(window.parent.feuillegauche.TreeView.getAttribute("selectedNodeIndex")).key);
}
}

if (compteurImages == 0)
{
document.body.style.backgroundImage = "url(Images/pasdimage.gif)";
document.body.style.backgroundRepeat = "no-repeat";
document.body.style.backgroundPosition = "center center";
}

//window.parent.feuilledroite.document.body.setAttribute("affichageCommence", false);
window.parent.SetWaitCursor(false);
bCancel = false;
}

// ajoute un picto à la cellule
function pictoCreate(iImg, oCell, bAfficherExtension, iTailleImage)
{
var oTable = document.createElement("table");
oCell.appendChild(oTable);

var oTbody = document.createElement("tbody");
oTbody.className = "clsTBodyLibNormal";
oTable.appendChild(oTbody);

// ligne du tableau qui contiendra l'image
var oTr, oTd1, oTd2;
oTr = document.createElement("tr");
// on fixe la taille de ce TR pour éviter que l'image ne bouge
if (rAffichageGd.value == "true")
oTr.className = "clsTrImageGd";
else
oTr.className = "clsTrImagePt";
oTbody.appendChild(oTr);

oTd1 = document.createElement("td");
oTd1.vAlign = "middle";
oTd1.align = "center";
oTr.appendChild(oTd1);

var iWidth = parseInt(iImg.width);
var iHeight = parseInt(iImg.height);

var oImage = document.createElement("<v:image>");

oImage.src = iImg.src;
oImage.style.visibility = "visible";
oImage.border = "0";

if (iWidth > iHeight)
{
oImage.style.width = iTailleImage;
oImage.style.height = (iHeight * iTailleImage) / iWidth;
}
else
{
oImage.style.height = iTailleImage;
oImage.style.width = (iWidth * iTailleImage) / iHeight;
}

//oImage.title = getAffichageFileName(File);
oTd1.appendChild(oImage);

// nouvelle ligne pour mettre l'intitulé de l'image
oTr = document.createElement("tr");
oTbody.appendChild(oTr);

oTd2 = document.createElement("td");
oTd2.vAlign = "bottom";
oTd2.align = "center";
oTr.appendChild(oTd2);

var oDiv = document.createElement("div");
if (rAffichageGd.value == "true")
oDiv.className = "clsDivNormalGd";
else
oDiv.className = "clsDivNormalPt";
oDiv.title = getAffichageFileName(File);
oTd2.appendChild(oDiv);

var noBr = document.createElement("noBR");
noBr.className = "clsNoBRnormal";
noBr.innerText = getAffichageFileName(File);
oDiv.appendChild(noBr);
window.parent.WndUtl.SendDbgMessage( "PictoCreate()\n" );
}

De
0
ellandebasque Messages postés 24 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 29 septembre 2010
29 mars 2004 à 09:52
Merci de beaucoup pour toute aide.
De
0
ellandebasque Messages postés 24 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 29 septembre 2010
29 mars 2004 à 09:53
Merci de beaucoup pour toute aide.
De
0

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

Posez votre question
ellandebasque Messages postés 24 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 29 septembre 2010
29 mars 2004 à 09:53
Merci de beaucoup pour toute aide.
De
0
ellandebasque Messages postés 24 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 29 septembre 2010
29 mars 2004 à 09:55
De
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
30 mars 2004 à 15:24
Bonjour
un petit bout de code
un extrait simplifié au maximum,
[ là, ça ne donne pas envie de regarder ]
et ça permet parfois de trouver la
solution, l'erreur, tout seul.
Cordialement. Bul.
0
Rejoignez-nous