Bonjour,
Il y a quelque chose que j'essaye de faire en Swing qui ne fonctionne pas que je le voudrais. A la base, voil� ce que je veux faire:

- initialiser les composants d'une JInternalFrame pour qu'elle puisse m'afficher des donn�es
- afficher cette JInternalFrame (vide, donc)
- charger les donn�es gr�ce � un thread

Le but est que la JInternalFrame s'affiche tout de suite, et qu'elle se remplisse quand le processus de r�cup�ration des donn�es sera termin� (sans que cela bloque le reste du GUI). J'ai donc fait ceci, au niveau du code de ma JInternalFrame (constructeur):

initComponents(); // j'initialise les composants... (une JTable)
signalObject(obj); // je signale que je veux utiliser les donn�es de "obj"

pack();
display(); // une routine qui affiche la JInternalFrame

Et la routine signalObject fait ceci:

dataObj = obj; // r�cup�ration de l'objet, tests sur celui-ci...
...
SwingUtilities.invokeLater(new ManageObj(dataObj));

Pour finir, la routine ManageObj est un thread dont la m�thode run() extrait les valeurs de l'objet, puis les injecte dans la JTable qui avait �t� initialis�e par initComponents().

Or, � chaque fois que j'invoque ma JInternalFrame, je n'ai d'affichage de la fen�tre qu'apr�s que les donn�es se soient charg�es... Et ca bloque pendant ce temps. Le pire c'est que j'ai d'autres frames qui fonctionnent avec d'autres donn�es, cod�es selon le m�me principe, et qui marchent (par contre la quantit� de donn�es � charger est bien moindre): la fen�tre s'affiche "vide", puis les donn�es sont pr�sent�es une fois finies d'�tre charg�es.

J'ai mis des flags un peu partout, qui me confirment que l'ordre d'ex�cution est le suivant, et qui me para�t �tre ce que je voulais:

> initComponents()
> signalObject()
> pack()
> display()
> manageObject()

J'ai loup� quelque chose ?

Aur�lien Mazurie

(ps: signalObject() est un interm�diaire dont j'ai besoin pour d'autre raisons)

Répondre à