Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1249 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Applet qui continue à tourner apres la fermeture web.[RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Applet qui continue à tourner apres la fermeture web.[RESOLU]

n°1039629
tuxbleu
renie ses origines
Posté le 08-04-2005 à 08:36:53  profilanswer
 

Difficile de synthetiser mon probleme dans un titre, et de choisir la bonne catégorie (html/JS/php ou Java).
 
Voila : Sur mon site web, je lance via un bouton "clikez ici pour jouer" une fenetre style popup qui lance une Applet. Cette Applet ouvre une socket sur l'Aplli serveur. A la fin du jeu, les communictions sont coupées.
Ca fonctionne plutot bien, sauf que si l'utilisateur ferme la fenetre de jeu (la popup) en cours de partie, et bien les communications par Socket sont toujours ouvertes, donc le serveur ne détecte pas que l'utilisateur a quitté la partie. Pour qu'il s'en rende compte, il faut que l'utilisateur ferme le navigateur qui a lancé la popup ! pourtant, l'Applet est lancée dans la popup.
 
Etrange non ?  :heink:  
 
Vous avez des idées pour m'aider à résoudre ca ?


Message édité par tuxbleu le 20-04-2005 à 11:20:32
mood
Publicité
Posté le 08-04-2005 à 08:36:53  profilanswer
 

n°1039665
trevor
laissez la vie vous étonner...
Posté le 08-04-2005 à 09:11:10  profilanswer
 

tu utilises les threads ou pas ?

n°1039676
tuxbleu
renie ses origines
Posté le 08-04-2005 à 09:33:44  profilanswer
 

oui, un pour la communication réseau.

n°1039695
trevor
laissez la vie vous étonner...
Posté le 08-04-2005 à 09:41:24  profilanswer
 

bah alors ca vient de là, cherche pas
 
il faut que tu surcharges la méthode destroy() (héritée de Applet) et que tu inclus un truc du genre :

Code :
  1. if (mySocket != null) mySocket.close()


et tant qu'à faire terminer proprement le thread aussi
 
a+

n°1039715
tuxbleu
renie ses origines
Posté le 08-04-2005 à 09:53:33  profilanswer
 

Si je comprend bien, quand la fenetre est fermée, la méthode destroy() est appelée.  
 
Donc j'ai qu'a mettre une methode destroy() dans ma classe qui extends Applet, et lui faire fermer les socket, et puis tout ce que je veux d'autre...
Question subsidière : Es-ce que je dois mettre "super.destroy(); " au début de ma méthode destroy ?
ou es-ce inutile car la méthode destroy() de Applet ne fait rien ?

n°1039717
tuxbleu
renie ses origines
Posté le 08-04-2005 à 09:54:39  profilanswer
 

désolé pour les questions cons, moi dans cette application, j'ai dévellopé le module réseau, je m'y connais que peu en Applet proprement dis...


Message édité par tuxbleu le 08-04-2005 à 09:54:58
n°1040354
trevor
laissez la vie vous étonner...
Posté le 08-04-2005 à 15:54:11  profilanswer
 

tuxbleu a écrit :

Si je comprend bien, quand la fenetre est fermée, la méthode destroy() est appelée.  
 
Donc j'ai qu'a mettre une methode destroy() dans ma classe qui extends Applet, et lui faire fermer les socket, et puis tout ce que je veux d'autre...
Question subsidière : Es-ce que je dois mettre "super.destroy(); " au début de ma méthode destroy ?
ou es-ce inutile car la méthode destroy() de Applet ne fait rien ?


 
voilà tu rajoutes une méthode destroy(), que tu surcharges en fait car elle est héritée de Applet
non pas besoin de "super.destroy()" car destroy() est vide
extrait http://java.sun.com/j2se/1.3/docs/api/index.html :
A subclass of Applet should override this method if it has any operation that it wants to perform before it is destroyed. For example, an applet with threads would use the init method to create the threads and the destroy method to kill them.  
 
The implementation of this method provided by the Applet class does nothing.

 
pour être plus précis, vu que ta com réseau tourne dans un thread, le mieux est d'écrire dans ta classe threadée qui s'occupe de la com réseau (appellons-là ComRes) une méthode close() du genre :

Code :
  1. public class ComRes extends Thread {
  2.   ...
  3.   public void close() {
  4.     if (mySocket != null) mySocket.close();
  5.     this.stop(); // ou this.comActiv = false;
  6.   }
  7.   ...
  8. }


 
et d'appeller cette méthode dans destroy() de ton applet:

Code :
  1. public class MyApplet extends Applet {
  2.   private ComRes com;
  3.   ...
  4.   public void destroy() {
  5.     com.close();
  6.   }
  7.   ...
  8. }


 
ainsi, tu fermes les sockets, ainsi que les threads
 
a+


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1040442
tuxbleu
renie ses origines
Posté le 08-04-2005 à 16:47:41  profilanswer
 

Ok, c'est bien ce que j'avais compris.
Comme j'ai une méthode dans mon Controleur de dialogue qui s'occupe de tuer mon réseau (et fermer la Socket), je v l'appeler. (En gros elle appele une méthode style la méthode close que t'as écrite).
 
Juste un truc :
stop(), c'est pas deprecated ? c'est ptet pour ca que ta mis : // ou this.comActiv = false;
Pour arreter un Thread, je fais juste un "return ;"
C'est équivalant ?  
Ca fonctionne, je demande juste pour ma culture.
 
merci de tes conseils et réponses ! :jap:

n°1040525
trevor
laissez la vie vous étonner...
Posté le 08-04-2005 à 17:27:12  profilanswer
 

oui stop() est deprecated, en gnl mieux vaut lui demander de se terminer proprement avec un truc genre test sur variable booléene (comActiv par exemple)
mais bon avec stop() ca marche.
tant que tu lock pas des fichiers qcques ou autres, peut de risque de planter quoi que ce soit
 
faire un "return ;" c assez brutal aussi (bien que le thread se termine lui proprement), mais il faut sassurer que tas pas de lock sur autre chose (fermer le socket et les flux c pas une mauvaise idée non plus)
 
ton return; est mieux que stop(), car le stop (à moins que ce soit un this.stop()) est appelé d'une autre méthode, donc c bien "bourrin"
avec le return; c'est lui-même qui se termine, ce qui est déjà mieux
 
maintenant je ne suis pas expert en multithreads, je te dis ce que je crois par rapport à mes connaissances de la chose
 
valaxx
a+


Message édité par trevor le 08-04-2005 à 17:28:33

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1041065
tuxbleu
renie ses origines
Posté le 09-04-2005 à 12:01:56  profilanswer
 

un avis est toujours bon a prendre.
 
:jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Applet qui continue à tourner apres la fermeture web.[RESOLU]

 

Sujets relatifs
Access - Fermeture d'un formulaire sans sauvegarde[résolu][wxWidgets]Sauvegarde dans un fichier...
[RESOLU] recevoir des paquets sans la libpcapintegrer une API (librairie) a java
[JAVA][awt]Différenciation des couleurs dans une imagestatistiques en java
ocaml -> java 1.5[résolu] gérer l'évènement click et plusieurs TIWGrid
[ VB.net ] type socket non défini [Résolu][Eclipse] Problème mise à jour [résolu]
Plus de sujets relatifs à : [JAVA] Applet qui continue à tourner apres la fermeture web.[RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR