Plantage à cause de menus déroulants

MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003 - 23 juin 2003 à 12:46
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 - 30 juin 2003 à 23:31
Bonjour,

La raison pour laquelle j'expose mon problème ici est que je le traîne depuis plusieurs semaines sans en trouver la solution, et que mon échéance de fin de projet se rapproche dangereusement.

Je développe un logiciel qui manipule différents formulaires, dont certains contiennent des menus déroulants. Quand je charge plusieurs des formulaires contenant ces menus déroulants, ça plante et le message suivant apparaît :

<<
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x784AB2B9
Function=RtlAllocateHeap+0x1AA
Library=C:\WINNT\System32\ntdll.dll
>>

Il est probable que j'accède à un moment donné à de la mémoire que je n'ai pas allouée. Je vous joins donc un petit morceau de code qui correspond à l'initialisation des données contenues dans un menu déroulant (données provenant d'une base Access).

Ce code contient très certainement au moins une erreur. Donc si quelqu'un pouvait me la corriger ou me donner des infos, cela me retirerait une grosse épine du pied.

//initialisation des MD
//MD acheteur
String query = "SELECT NomA FROM Acheteur";
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet results = s.executeQuery(query);
int numrows = 0;
while(results.next() == true)
numrows++;

String [] liste_acheteur = new String[numrows];
results.beforeFirst();
int i=0;
while(results.next() == true)
{
liste_acheteur[i] = results.getString(1);
i++;
}
DefaultComboBoxModel modelAcheteur = new DefaultComboBoxModel(liste_acheteur);
JComboBox jcb_acheteur = new JComboBox(modelAcheteur);

Merci d'avance à ceux qui se pencheront sur mon problème !

MH

9 réponses

cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
23 juin 2003 à 13:18
Juste en passant, une bonne programmation, les déclaration de variable doit-être fait au début des class et non en pliens centre, puisque ça devient de plus en plus compliquer à corriger.

ton erruer est une erreur externe à java, donc une eerreur que je suppose du au lien qui relis java et ta base de donnée. Je suppose, soit que tu base de donnée est corrompus (si tu es sous access, tu as juste à cliquer sur réparer) ou soit que ta bases de donnée est plus récente que tes drivers NT. Par exemple, si tu as créé ta bases de donnée en oracle 9i et que les driver que tu possède est pour la 8i et moins, ça pourrais causé ce genre d'erreur, faudrais savoir comment tu tiens ouvert ta bases de donnée. Àq quel ligne ça plante exactement ??? tu devrais faire fonctionner ton programm en pas à pas pour savoir la ligne exact.

ça se pourrasi aussi que ça soit un problème de mémoire trop plienne mais habituellmenet, java te donne un message à propos de la mémoire virtuel, ce qui est pas le cas.

tu pourrais aussi faire une recherche sur intnernet à propos de cette fonction pour savoir c'est quoi " RtlAllocateHeap ", sur le site de microsoft, tu devrais trouver, au moins tu vas pouvoir comprendre ton erreur
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
24 juin 2003 à 14:28
Salut,

Tout d'abord, merci d'avoir répondu !

Ta réponse m'intéresse beaucoup, mais j'aurais besoin de quelques précisions.

ça signifie quoi exactement une base de données "corrompue" ? Où se trouve le bouton "réparer" sur lequel tu m'as conseillé de cliquer ?

Et surtout ça correspond à quoi les drivers NT ? Au fichier ntdll.dll par exemple ?

Par ailleurs, la ligne qui plante change à chaque plantage, mais très souvent c'est une commande "executeQuery".

Merci !

MH
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
24 juin 2003 à 16:15
faudrais savoir si l'erreur est normal aussi, comme un select mal fait ou qui point vers dequoi de non valide.

si ta bases de donnée est corrumpu, t'inquiète, sous access, ça le fait au moins une fois semaine sur une grosse base de donnée. Ouvre access et ouvre ta base de donnée, puis dans les menu en haut, tu vas trouver à quelques part dasn les menu, réparer base de donnée et compacter base de donnée. Je te conseil de compacter puis de réparer par la suite ou encore mieux, réparer, compacter et réparer encore.

tu travail sur quel baes de donnée, access ou oracle ???
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
25 juin 2003 à 10:21
Voilà un exemple de Semect que je fait :
query = "SELECT NomF FROM Fournisseur";
Comme tu le vois c'est une commande très simple donc je ne pense pas que mes Select soient mal faits.

J'ai essayé de faire réparer-->compacter-->réparer mais ça plante toujours de la même façon.

Ce qui est bizarre c'est que quand je charge mon formulaire qui contient des menus déroulants, ça plante pas. C'est quand je le charge une deuxième fois (en cliquant sur retour puis en revenant) que ça plante.

Sinon je travaille sur une base de données Access.

MH
0

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

Posez votre question
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
25 juin 2003 à 13:07
la première fois ça plante pas, mais la 2e fois oui .... ça se peut tu que les donner sont pas effacer lorsque tu essai de le réouvrir pis ça lante puisqu'il y a déjà des donner.
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
30 juin 2003 à 11:42
Salut,

ça se peut effectivement. Du coup j'ai essayé d'écrire une méthode "Nettoyage()" dans laquelle je fais des
f.remove(composant) (f c'est la JFrame de mon formulaire), mais ça plante toujours. Peut-être que tu connaîs d'autres méthodes de nettoyage plus efficaces (genre delete ou des trucs comme ça) ??

MH
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
30 juin 2003 à 13:17
est e que tu ferme bien ta variable à al fin de ta classe ????

s.close ???

peut aussi essayer les méthodes

s.clearBatch();
s.clearWarnings();

pour supprimer ce qui est en mémoire, on sait jamais, masi d'après moi, ton erreur c'est des données toujours porésente ou des variables ou ta base de donnée toujours ouvert ou, encore, que ta base de donnée est fermer (masi je crois moins ce cas là, puisque tu l'ouvre d'après ce que j'ai pus voir)
0
MHidden Messages postés 16 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 30 juillet 2003
30 juin 2003 à 16:29
ça y est ! CA MARCHE !!

effectivement je ne fermais aucune de mes variables "Statement" qui pourtant sont très nombreuses. Mais maintenant ça tourne.

Merci beaucoup ! Ton aide m'a été très précieuse !

MH
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
30 juin 2003 à 23:31
de rien, faut dire que c'était beaucoup par chance, puisque j'ai jamais lier une database avec java. Avec access très souvent, mais pas java. Par contre d'après ton problème, ça avait l'air dequoi de genre comme problème et effectivement j'avais raison (ok, avec quelques essai, mais bon lol)
0
Rejoignez-nous