[JAVA] Comment laisser tourner une méthode en arrière plan ?

Comment laisser tourner une méthode en arrière plan ? [JAVA] - Java - Programmation

Marsh Posté le 19-05-2004 à 14:46:03    

Je suis en train de faire un jeu.
Je souhaiterais faire tourner ma partie reseau, qui s'occupe d'échange d'informations, en arrière plan, pendant que je joue au jeu( via une interface Swing).
Sans interface, tout ce passe bien, mais quand je l'intègre (l'interface), une fois que le reseau prends la main, je pe kasi rien faire dans mes fenetre swing.  
 
Kelkun a une idée ?
 
merci.

Reply

Marsh Posté le 19-05-2004 à 14:46:03   

Reply

Marsh Posté le 19-05-2004 à 14:48:17    

Il faut que tu lances la gestion du réseau dans une thread à part.

Reply

Marsh Posté le 19-05-2004 à 14:56:57    

gfive a écrit :

Il faut que tu lances la gestion du réseau dans une thread à part.


 
je suis pas un pro en thread, je lis de la doc la dessus en ce moment. Il fo ke je lance mon interface dans un thread, et mon reseau dans un autre ?  
Ou alors je lance l'interface et elle crée le thread reseau ?  
 

Reply

Marsh Posté le 19-05-2004 à 15:06:13    

Ca serait mieux que l'interface lance une thread pour le réseau, oui.
 

Reply

Marsh Posté le 19-05-2004 à 15:15:03    

gfive a écrit :

Ca serait mieux que l'interface lance une thread pour le réseau, oui.


 
Merci de tes réponses.  :)  
 
J'ai encore une question : mon interface va creer un thread reseau. J'ai des méthodes dans réseau qui lancent des méthodes de mon interface. C'est possible ou pas ? Je vais tester bien sur, mais autant que je sache si je perd mon temps...
 
merci  :)

Reply

Marsh Posté le 19-05-2004 à 15:16:32    

oui, c'est tout à fait possible!

Reply

Marsh Posté le 19-05-2004 à 15:19:27    

gfive a écrit :

oui, c'est tout à fait possible!


 
 :love: c'est toi le meilleur ;) ! Bon ben c partie ! j'ai du boulot, mais si ca marche, je te vénèrerais ... :pt1cable:  
 
merci encore.

Reply

Marsh Posté le 19-05-2004 à 15:30:37    

1 - je suis pas le meilleur,
2 - ca marchera, c'est sûr : j'ai fait ça des tas de fois.
3 - je veux pas que tu me vénères : ça tient chaud, et vu l'été qui s'annonce, c'est pas une bonne idée.

Reply

Marsh Posté le 19-05-2004 à 15:43:02    

gfive a écrit :

1 - je suis pas le meilleur,
2 - ca marchera, c'est sûr : j'ai fait ça des tas de fois.
3 - je veux pas que tu me vénères : ça tient chaud, et vu l'été qui s'annonce, c'est pas une bonne idée.


 
Bon,je te propose un deal : je te vénère pas, et tu réponds à une dernière kestion ;) :  
 
Ma classe réseau contiendra certe une méthode run(), mais aussi d'autres méthodes que je suis suceptible d'appeler depuis mon interface.
Ca posera un problème ?
 
Perso je suppose que non, pour peu que je pense a glisser un sleep pour rendre la main. t'en pense koi, toi ?

Reply

Marsh Posté le 19-05-2004 à 15:45:45    

euh...non, ça doit pas poser de problème, même sans sleep, enfin, je crois pas : ça ne sera pas exécuté par la thread lancée pour gérer le réseau : c'est pas parce qu'une classe implémente Runnble que toutes ses méthodes sont exécutées par la thread associée.

Reply

Marsh Posté le 19-05-2004 à 15:45:45   

Reply

Marsh Posté le 19-05-2004 à 15:53:46    

gfive a écrit :

euh...non, ça doit pas poser de problème, même sans sleep, enfin, je crois pas : ça ne sera pas exécuté par la thread lancée pour gérer le réseau : c'est pas parce qu'une classe implémente Runnble que toutes ses méthodes sont exécutées par la thread associée.


Bon ben en téorie, me voila sortie des emmerd...
enfin    "en théorie, la théorie et la pratique, c'est exactement la meme chose, en pratique, c'est complement différent" citation de mon prof d'infographie.
 
Le sleep, c'est paske j'ai lu que selon l'environement, ils est possible que les différents threads ne s'exécutent pas en parallèles si on ne rends pas la main.
 
c'est pas parce qu'une classe implémente Runnble que toutes ses méthodes sont exécutées par la thread associée. -> voila qui est parfait !

Reply

Marsh Posté le 19-05-2004 à 15:54:42    

encore une fois merci d'avoir pris le temps de répondre ! :)

Reply

Marsh Posté le 19-05-2004 à 15:56:06    

Enfin, j'espère ne pas avoir dit de conneries, hein : j'ai fait des trucs comme ça en AWT, mais il est possible que ça pose des problèmes en swing.

Reply

Marsh Posté le 19-05-2004 à 15:59:38    

gfive a écrit :

Enfin, j'espère ne pas avoir dit de conneries, hein : j'ai fait des trucs comme ça en AWT, mais il est possible que ça pose des problèmes en swing.


 
Euh me casse pas le moral !  :o  
 
Swing est une surcouche de AWT, alors no souci! (j'essaie de me persuader ! ).
 
:)
++

Reply

Marsh Posté le 19-05-2004 à 16:01:14    

huhuhu

Reply

Marsh Posté le 19-05-2004 à 16:03:23    

tuxbleu a écrit :

J'ai des méthodes dans réseau qui lancent des méthodes de mon interface. C'est possible ou pas ?

oui, à condition d'utiliser SwingUtilities.invokeLater()
 
comme précisé là :
http://java.sun.com/products/jfc/t [...] eads3.html
 
 
(4)
 
 
 
 
edit : et mets une bonne doc de quelle thread appelle quelle méthode.


Message édité par nraynaud le 19-05-2004 à 16:05:25

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

Marsh Posté le 19-05-2004 à 16:06:36    

Ca dépend de ce qu'il fait, je suis désolé!
 
Imagine qu'il affiche une liste de gens connectés dans une JTable : à la déconnection d'un mec conecté, il reçoit un évènement => il peut directement appeller son modèle, et réprcuter le changement, normalement.
 
Le coup du invoke later ne vaut que si le modèle peut prendre du temps à fournir ses données d'après ce que j'ai compris des 10 premières lignes de l'article, non?

Reply

Marsh Posté le 19-05-2004 à 16:14:11    

gfive a écrit :

Ca dépend de ce qu'il fait, je suis désolé!
 
Imagine qu'il affiche une liste de gens connectés dans une JTable : à la déconnection d'un mec conecté, il reçoit un évènement => il peut directement appeller son modèle, et réprcuter le changement, normalement.
 
Le coup du invoke later ne vaut que si le modèle peut prendre du temps à fournir ses données d'après ce que j'ai compris des 10 premières lignes de l'article, non?

écoute, je vais à la Roche de Solutré, pendant ce temps tu te renseignes sérieusement et on en discute après.
 
Mais là se fonder sur 10 lignes d'un article pour mettre des points d'exclamation, c'est vraiment n'importe quoi.


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

Marsh Posté le 19-05-2004 à 16:16:58    

Ok, ok, au temps pour moi : je n'ai pas fait de Swing depuis trop longtemps : il se trouve bêtement que en AWT pur, ce genre de choses marche très bien, et que pour le cas à la con de l'attente de données non disponibles, j'avais codé un machin qui (comme c'est étrange) empilait des traitements à exécuter après réception des infos. Scuse.
Mais je connaissais pas cette putain de SwingUtilities. Il est temps que je me remette à Swing! :)
 
Edit : en fait, j'ai juste eu du pot que ça marche, même. :D:D


Message édité par gfive le 19-05-2004 à 16:32:18
Reply

Marsh Posté le 19-05-2004 à 16:30:21    

nraynaud a écrit :

oui, à condition d'utiliser SwingUtilities.invokeLater()
 
comme précisé là :
http://java.sun.com/products/jfc/t [...] eads3.html
 
(4)
edit : et mets une bonne doc de quelle thread appelle quelle méthode.


 
 
 
Je c pas si je v dire une connerie : mes méthodes de réseau n'appellent pas directement les méthodes de mon interface. J'ai un controleur de dialogue (Modèle SEEHEIM) qui gère les communications. Alors peut-etre que le débat qui a eu lieu sur le fait d'utiliser SwingUtilities.invokeLater()
n'a pas a avoir lieu ? ou alors ca change rien ?
 
Bon, je v coder un peu, et je vous tient au courant.


Message édité par tuxbleu le 19-05-2004 à 16:34:15
Reply

Marsh Posté le 19-05-2004 à 16:33:09    

EUHHH j'aurais une question : j'ai développé une IHM et je souhaiterais séparer en plusieurs classes la partie méthodes (connexion, déconnexion, évènements...) de la partie interface graphique ! Il paraît qu'il fo créer les différents panels de la frame et les instancier dans la classe principale ?!?!?! J'ai testé mais dès que j'ai mon évènement sur un bouton, par exemple, la variable correspondant au bouton n'est pas reconnue ! Pourriez vous m'aiderrrr !!! Merci

Reply

Marsh Posté le 19-05-2004 à 16:36:18    

chantal_13 a écrit :

EUHHH j'aurais une question : j'ai développé une IHM et je souhaiterais séparer en plusieurs classes la partie méthodes (connexion, déconnexion, évènements...) de la partie interface graphique ! Il paraît qu'il fo créer les différents panels de la frame et les instancier dans la classe principale ?!?!?! J'ai testé mais dès que j'ai mon évènement sur un bouton, par exemple, la variable correspondant au bouton n'est pas reconnue ! Pourriez vous m'aiderrrr !!! Merci


 
Tu peut creer un topic stp. Je viendrais participer aux réponses avec plaisir, mais j'aimerais que mon topic serve à débattre de mes problèmes. merci

Reply

Marsh Posté le 19-05-2004 à 16:37:41    

désolée suis NOVICE....comment créer un topic? c'est quoi exactement un topic??? :sweat:  :heink:

Reply

Marsh Posté le 19-05-2004 à 16:38:41    

un topic c'est un sujet (comme celui dans lequel tu post)

Reply

Marsh Posté le 19-05-2004 à 16:40:27    

je veux bien en créer un mais comment faire?

Reply

Marsh Posté le 19-05-2004 à 16:40:58    

http://forum.hardware.fr/icones/newsujet_big.gif

Reply

Marsh Posté le 19-05-2004 à 16:41:03    

chantal_13 a écrit :

désolée suis NOVICE....comment créer un topic? c'est quoi exactement un topic??? :sweat:  :heink:


 
Tu clikes sur Nouveau sujet, tu mets un titre, etc...


Message édité par tuxbleu le 19-05-2004 à 16:42:05
Reply

Marsh Posté le 19-05-2004 à 16:44:02    

oui désolée jai trouvé ca ya 5 min, javais pas trop vu en fait ke cété juste en bas de page

Reply

Marsh Posté le 19-05-2004 à 16:54:44    

Bon pour ma part, ya un truc ki dois merder : je crée mon interface, je lance le thread de mon réseau, mais l'interface ne réponds pas...:'(


Message édité par tuxbleu le 19-05-2004 à 16:55:05
Reply

Marsh Posté le 19-05-2004 à 17:09:51    

Ca y est , ma marche !
 
C trop bien, je vous aime !
Je viens de lire mon code et m'apercevoir ke j'avé fait : monReseau.run() au lieu de monReseau.start(), ce ki bien sur compile et s'exécute, mais ne donne pas le résutat voulu.
 
Bon maintenant ke ca se lance en parralèle, je vais essayer que ca fasse ce ke je ve....


Message édité par tuxbleu le 19-05-2004 à 17:10:12
Reply

Marsh Posté le 19-05-2004 à 18:04:05    

euuuh....
 
monRéseau, ça implémente Runnable??
 
Si oui, il  faut faire Thread t = new Thread(monReseau);
t.start();
 
sinon, y'a pas de nouvelle thread.

Reply

Marsh Posté le 19-05-2004 à 18:17:59    

gfive a écrit :

euuuh....
 
monRéseau, ça implémente Runnable??
 
Si oui, il  faut faire Thread t = new Thread(monReseau);
t.start();
 
sinon, y'a pas de nouvelle thread.


 
monReseau, ca extends Thread. no souci, sa fonctionne

Reply

Marsh Posté le 19-05-2004 à 18:18:10    

:)

Reply

Marsh Posté le 21-05-2004 à 19:28:24    

Les communications passent bien en tre mon controleur de dialogue et mon Thread reseau, et inversement, donc tout va bien.  
:)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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