[Java] Applet, reseau et repaint() : probleme

Applet, reseau et repaint() : probleme [Java] - Java - Programmation

Marsh Posté le 16-09-2002 à 23:24:31    

Il se passe un truc bizarre avec une applet : dans une applet, on veut mettre le curseur a "sablier", envoyer une requete sur le reseau de maniere synchrone, et remettre le curseur normal une fois la requete revenue (tout ca dans le meme thread).
 
Or, il se trouve que dans certains cas (surtout : petite machine), le curseur n'a pas le temps de se mettre au sablier, la requete part et revient, et le curseur clignote un peu avant de rester definitivement sur la fleche.
 
Je sais que tout ce qui concerne le gui tourne en priorite basse, et que le lancement de la requete bouffe du CPU sur notre appli, mais la, ca nous semble un peu gros : meme pas qqs cycles pour mettre a jour un curseur, c'est zarbi. Est-ce que par hasard, dans le contexte Win NT + JDK 1.3.1 + Internet Explorer 5 + y'aurait pas un conflit de ressources quelconque (autre que CPU) qui pourrait expliquer ca ?

Reply

Marsh Posté le 16-09-2002 à 23:24:31   

Reply

Marsh Posté le 16-09-2002 à 23:49:37    

T'es sûr que bêtement, tu travailles pas sur un réseau local, qui dépotte comme un âne, et que la requête va pas trop vite pour que tu voies le changement??

Reply

Marsh Posté le 16-09-2002 à 23:54:54    

Gonzoide a écrit a écrit :

 
qui pourrait expliquer ca ?




 
Euh... Ta requete part, tu as la reponse avant que le curseur ne change et tout marche... il est ou le "probleme" ?
 
Ce que tu fais (vu que tu parles de synchrone) c'est :
 
si pression boutton alors  
envoi requete
curseur sablier
attente reponse
curseur fleche
is
 
Pour repondre a ta question effectivement si la priorite du thread du GUI est faible et si ton appli prend beaucoup de temps CPU et a une prioritee normale voir haute, l'update de la GUI risque de se faire a la fin de l'execution du couple envoi requete reception reponse...  
 
Alors seulement la GUI sera updatee d'ou le clignottement : le curseur change mais apres avoir recu la reponse donc il rechange a nouveau. Les "qqes cycles" sont bien la... C'est purement une histoire de gestion des threads par la VM.
 
Essaye evt de faire un update du GUI manuellement avant d'attendre la reponse.
 
Bye

Reply

Marsh Posté le 17-09-2002 à 07:36:03    

phenixl a écrit a écrit :

 
Euh... Ta requete part, tu as la reponse avant que le curseur ne change et tout marche... il est ou le "probleme" ?




En fait l'aller-retour de la requete prend un certain temps, durant lequel on aimerait bien avoir le sablier
 

phenixl a écrit a écrit :

 
si pression boutton alors  
envoi requete
curseur sablier
attente reponse
curseur fleche
is




 
En fait, on change le curseur avant d'envoyer le sablier, sinon c'est ca :)
 

phenixl a écrit a écrit :

 
Pour repondre a ta question effectivement si la priorite du thread du GUI est faible et si ton appli prend beaucoup de temps CPU et a une prioritee normale voir haute, l'update de la GUI risque de se faire a la fin de l'execution du couple envoi requete reception reponse...  




 
C'est ce que je pense, mais ca me semble un peu enorme que pendant tout ce temps le petit thread de repaint a meme pas un petit chouia de temps pour rafraichir le curseur ...
 

phenixl a écrit a écrit :

 
Essaye evt de faire un update du GUI manuellement avant d'attendre la reponse.




 
Chuis pas tres GUI ... je croyais qu'il y avait pas moyen d'obtenir explicitement un repaint(), juste en faire la demande. On peu le forcer ?
 

Reply

Marsh Posté le 17-09-2002 à 08:55:36    

Essaie de faire un repaint explicite, sinon...A moins que tu aies déjà essayé :  
 
tu appelles repaint() sur le composant sur lequel tu as changé le curseur...Mais je suis pas sûr que ça suffise : si le curseur n'est pas sur le composant à ce moment là, le curseur va peut être pas être raffraichit...

Reply

Marsh Posté le 17-09-2002 à 11:55:04    

Et en reforcant le repaint() sur toute l'applet ?

Reply

Sujets relatifs:

Leave a Replay

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