Applet qui continue à tourner apres la fermeture web.[RESOLU] [JAVA] - Java - Programmation
Marsh Posté le 08-04-2005 à 09:41:24
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 :
|
et tant qu'à faire terminer proprement le thread aussi
a+
Marsh Posté le 08-04-2005 à 09:53:33
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 ?
Marsh Posté le 08-04-2005 à 09:54:39
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...
Marsh Posté le 08-04-2005 à 15:54:11
tuxbleu a écrit : Si je comprend bien, quand la fenetre est fermée, la méthode destroy() est appelée. |
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 :
|
et d'appeller cette méthode dans destroy() de ton applet:
Code :
|
ainsi, tu fermes les sockets, ainsi que les threads
a+
Marsh Posté le 08-04-2005 à 16:47:41
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 !
Marsh Posté le 08-04-2005 à 17:27:12
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+
Marsh Posté le 08-04-2005 à 08:36:53
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 ?
Vous avez des idées pour m'aider à résoudre ca ?
Message édité par tuxbleu le 20-04-2005 à 11:20:32