[Swing] Attendre la fin d'un repaint() pour continuer l'execution...

Attendre la fin d'un repaint() pour continuer l'execution... [Swing] - Java - Programmation

Marsh Posté le 23-12-2003 à 17:34:56    

:hello:  
 
 
Encore une fois, je vais prouver à la face du monde mon incompétence totale en SWING...  :whistle:  
 
 
A la demande de l'utilisateur, mon appli Java lance un Process pour executez un programme en C...
Ce programme en C n'a aucun affichage graphique.
 
Pour eviter la panique de l'utilisateur qui pourrait croire que l'appli est plantée (le temps d'execution du programme C peut se chiffrer en 10aine de secondes..), je voudrais simplement afficher une fenêtre contenant un message du style "Calcul en cours..."
 
J'ai écrit ma fenêtre "Splash" (extends JWindow), je l'affiche avant le lancement du calcul (avec un show()), je lance le calcul et une fois mon calcul terminé, je l'efface (dispose())
 
Seulement, ma fenêtre ne s'affiche pas réelement, j'ai juste la trace en gris de cette fenêtre..
 
Comment dire au programme d'attendre le repaint() de l'IHM pour continuer a s'executer ???  :??:  
 
J'ai essayé de faire un repaint() sur la fenêtre principale de l'IHM, un repaint() sur la fenêtre "Splash", mais rien n'y fait..
Il y a t-il une solution simple ou alors dois-je utiliser un SwingWorker (je viens de découvrir cette classe) ou autre ruse de sioux ?
 
 
Mercii pour la réponse qui est certainement très simple..
 :jap:  
 
Et joyeuses fetes !!!


---------------

Reply

Marsh Posté le 23-12-2003 à 17:34:56   

Reply

Marsh Posté le 24-12-2003 à 02:21:19    

SwingWorker.
 
Il ne faut rien faire de long dans la tache de répartition des événements swing.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-01-2004 à 09:19:53    

:hello:  
 
 
 
Je me suis replongé dans ce problème mais je suis incapable de le faire...  :cry:  
 
J'ai écrit la méthode suivante que j'appelle juste avant l'execution d'une autre fonction qui lance un process (execution d'un programme C)
 

Code :
  1. public void a() {
  2.  Runnable showSplashWindow_l = new Runnable() {
  3.   public void run() {
  4.                              // (SplashWindow est une JWindow)
  5.               new SplashWindow().show();
  6.   }
  7.  };
  8.  try {
  9.   SwingUtilities.invokeLater(showSplashWindow_l);
  10.  } catch (Exception e) {
  11.   e.printStackTrace();
  12.  }
  13. }


 
Mais ca ne marche pas...  :cry:  
Ma fenetre s'affiche mais apres l'execution du programme C  :cry:  
J'ai bien essayé de faire un  

Code :
  1. SwingUtilities.invokeAndWait(showSplashWindow_l);


 
Mais je me prends l'exception

Citation :

java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread


 
 
Quelqu'un peut-il m'aider please ??
Tks !!
 :jap:


---------------

Reply

Marsh Posté le 14-01-2004 à 10:55:47    

heu tu rames ou quoi ?
J'ai dit SwingWorker, pas invokeLater().
 
SwingWorker c'est un truc qui bosse en arrière plan, c'est ce qu'il te faut. Tu créés un SwingWorker et tu lui dis de faire le traitement en C.
 
invokeLater c'est quand tu n'es pas dans le thread swing et que tu veux exécuter un bout de code touchant à l'interface.
 
 
le code du run() de ton swingWorker doit être :
- invokeAndWait(affiche splashScreen)
- faire le traitement en C
- invokeAndWait(retirer le splashScreen)


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed