Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Thread et Interface [ Divers / Débutant(e) ] (LordBob)

vendredi 16 novembre 2007 à 23:45:23 | Thread et Interface

LordBob

Membre Club
Bonsoir a tous,
voila en fait je suis en train de plancher sur un problème de conception auquel je n'arrive pas à trouver de solution. Voila en fait je développe une application qui a une interface principale et j'aimerais que cette interface lance une deuxieme interface mais en parallèle pour que lorsqu'une des deux interfaces soit bloqués cela ne bloque pas l'autre.

Donc en fait voila comment je procéde: en fait mon interface lance un thread et dans ce thread je lance mon interface, voila le code:
public class JControler extends Thread
{
    public void run()
    {  this.productDlg = new JDlgProducteur(); /* reste de la classe control les actions sur les differents composant de la fenetre*/}
}

le probleme c'est que ca me lance l'interface mais le thread se termine et donc en fait je me retrouve avec un thread unique. donc si un des deux dialog bloques, alors ca bloque toute mon application.
et en fait je ne vois pas trop comment résoudre ce problème...

donc voila si quelqu'un pouvait me conseiller sur la méthode à suivre pour lancer deux interfaces dans deux interfaces thread distinct...

Ou peut etre que la solution serait de déclarer mon interface comme ceci:
class Dlg extends JFrame implements Runable
{ [...] public void run() { ... } [...] }

et que la mon interface va se lancer dans un thread appart. mais ma gestion des evenement de la fenetre se trouvant dans la classe qui lance le thread, va continuer de faire partie du thread principale.

donc en fait je ne sais pas trop comment faire, pourriez-vous m'éclairer svp?
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."

dimanche 18 novembre 2007 à 12:28:24 | Re : Thread et Interface

AlexN

Réponse acceptée !
Salut,

Swing et le multi-threading. Deux articles qui permettent de mieux comprendre ce sujet :

- Threads et performance avec Swing
- SwingWorker (Java SE 6)

Swing est un sous système de threads de la jvm. Ce sous système n'est pas thread safe, sauf pour quelques methodes : repaint(), invalidate() et revalidate() -c'est à dire que la communication avec swing (l'invocation des méthodes swing) par des threads externes (ceux de la jvm) doit respecter un "contrat de communication" (une gestion des evenements centralisée par un seul thread qui est l'EDT). Le contrat est que toute communication avec l'interface doit se faire à travers les methodes invokeLater ou invokeAndWait de SwingUtilities. Ces méthodes sont chargées de créer un thread par message/evenement puis de placer ces threads dans la file d'attente de l'EDT, sans bloquer le thread qui les utilise (invokeLater) ou en mode bloquant (InvokeAndWait). Tout thread qui ne respecte pas ce contrat peut bloquer le système swing ou en etre exclu comme dans ton premier cas ou le thread JControler est créé dans un contexte externe à l'application swing (le thread de ton JControler, qu'il soit une extension de Thread ou une implémentation de Runnable, est créé dans la jvm et pas dans le sous système swing, parce qu'il n'est pas englobé dans un appel de type InvokeLater).

Une application swing est composé de trois threads :

- le main application thread qui execute le main()
- le toolkit thread qui est chargé de faire l'interface evenementielle (clic souris, clavier...) entre swing et l'os. Il envoi tous les messages à l'EDT :
- l'event dispatcher thread ou EDT qui est le coeur de swing. Il a la responsabilité de la gestion de la file d'attente des evenements swing et la distribution de ces evenements à chaque composant

Tout thread externe souhaitant communiquer avec le système swing doit passer par l'EDT.

D'un autre côté, il est tout à fait possible d'envisager une application swing dont certains threads lancés depuis l'interface deviennent indépendants de l'EDT, parce ces threads réalisant des opérations lourdes pourraient bloquer l'EDT. Seulement, lorsque ces threads devenus indépendants veulent communiquer avec l'interface, il doivent à nouveau respecter le contrat (passer par l'EDT). Comme ils sont désynchronisés de l'EDT, ils doivent utiliser les methodes invokeLater ou invokeAndWait de SwingUtilities pour communiquer à nouveau avec lui (placer des messages dans sa file d'attente). Un mécanisme un peu plus perfectionné est celui des SwingWorker.

Faire une interface pour controler un seul thread ne me semble pas la meilleure solution (surtout si le programme principal est amené à lancer 50 threads, ca fait 50 interfaces...). Une seule interface pour controler plusieurs threads, du moment qu'ils respectent le contrat swing, est plus dans l'esprit de swing.


dimanche 18 novembre 2007 à 12:54:44 | Re : Thread et Interface

LordBob

Membre Club
ok merci pour toute ces informations. j'entrevoie le coeur du problème et peut-être une ou deux solutions.
je vais donc étudier tout cela pour trouver une solution à mon problème.
merci beaucoup pour tes informations en tout cas.
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."



Cette discussion est classé dans : public, lance, thread, interface, interfaces


Répondre à ce message

Sujets en rapport avec ce message

Thread declaré public static final dans une interface : absurde ? [ par jcodeunpeu ] Bonsoir à tous,petit souci avec un Thread: 1) je déclare dans une interface un  thread comme ceci :   public static final Thread personneInitialise = Important : Un thread qui lance plusieurs threads [ par polly60 ] Salut,Voilà, j'ai un thread Launching qui appelle 10 fois une fonction startfunction(object) qui elle-même lance un autre thread Test.Donc ca fait dix décalage de thread ... help please [ par joebar3333 ] Bonjour,après plusieurs problèmes avec les threads, j'ai voulu vérifier quelque chose de simple. Or même ce code source simple ne fonctionne pas comme Problèmes avec les interfaces [ par mike109 ] Bonjour, Je cherche à tester ça (oui je sais c'est tout con lol) //Tous les animaux doivent implémenter les méthodes suivantes //On remarque qu'une Problème d'affichage dans une application multi thread [ par linkprogram ] Bonjour, je suis étudiant.je rencontre un petit problème... j'ai beaucoup de mal à le résoudre... s'il vous plait, aidez-moi ! Voilà, mon programme ef NullPointerException [ par SHAHPOUR ] je suis entraine de faire un projet sur l'opération matricielle avec un interface et quand j'aimerais faire l'operation add,sub,mult,.... en utilisant Interface en Java qui lance et communique avec un .exe ? [ par Dimension N ] Bonjour, je suis en train de faire évoluer un logiciel libre : Surface Evolver. C'est un logiciel appliqué à la chimie simulant des nano-surfaces, qu JPanel MousePressed et Freeze [ par xboubix ] Bonjour,j'essaye de faire un petit programme tout simple, dans lequel un Jpanel possède une image de fond, et un gif transparent se balade dedans, lor Probleme de logique de Thread ... [ par threadom ] Donc ... Je dispose d'une classe composer comme cela :public class cOutput { public static void init() { } public static void start() { } //********** thread et affichage graphique [ par bertrand69fr ] Bonjour, J'essaye de faire un programme simple du genre course de chevaux. Les chevaux sont simplement représentés par des cercles... Le problème est


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.