Bonjour à tous,
une petite question de (gros) débutant en Java : voilà, je me demandais quand est-ce que l'EDT était lancé et s'il l'était systématiquement pour toute nouvelle application
Le contexte:
Pour mieux situer mes questions, je précise que je suis un développeur confirmé en C++ avec Qt. Je me mets doucement au Java et je cherche a faire un parallèle entre la boucle d'événements gérée par l'event loop de Qt et l'EDT dans Java (si parallèle il y a).
Le cas pratique :
Plus précisément : je susi en train de développer une classe FrameSocket, capable de communiquer en TCP avec une autre FrameSocket en envoyant et recevant des 'frames' ( <=> des paquets de données avec un format perso prédéfini).
Chaque instance de ma tite classe lance donc son propre thread pour attendre, lire les données les données reçues et en extraire la substantielle moelle (entendez par là désérialiser mes types de données perso).
Ce que je voudrais maintenant implémenter c'est un mécanisme d'event + listeners qui va émettre un event lorsque :
- la connection a été perdue
- une nouvelle frame a été reçue et désérialisée.
Après quelques lectures (merci aux tutos de ce site !) je pense que poster les événements dans l'EDT est le meilleur moyen pour arriver à mes fins puisque logiquement, dans le cas d'une appli avec UI ces événements (ainsi que ceux générés par l'UI) seront à l'origine des changements de mon modèle et de l'UI elle même.
La question :
La question que je me pose : est-ce que l'EDT est un thread ... euhm ... disons ... "principal" ... qui est systématiquement lancé à chaque démarrage d'application et d'applet, même lorsqu'une l'application n'utilise pas d'UI ?
(en d'autres termes, le jour où je réutiliserai ma FrameSocket dans une autre appli, serai-je sûr que je peux compter sur la présence de l'EDT ?)
Question subsidiaire (si la première réponse est affirmative): si une application n'utilise pas d'UI, mais qu'elle a un fonctionnement événementiel, un développeur java utilisera-t-il systématiquement l'EDT pour gérer ses événements ? (avec invokeLAter, invokeAndWait, ...)
Typiquement, mon serveur avec 15 clients connectés aura 15 FrameSockets instanciées (donc 15 threads) et le modèle + controller sera géré par l'EDT ?
Y a-t-il d'autres façon de faire avec leurs avantages (sans réinventer la roue inutilement) ?
Dernière question (pour la route, et si je vous ai pas encore assez ennuyé avec mes questions bêtes) : Avec Qt par exemple, le thread principal qui gère l'event loop est simplement le thread principal de l'appli. On a quelque chose dans le genre:
Pourquoi il a été décidé en Java que le thread de l'EDT ne soit pas le même que le thread du main() ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main(int argc, char** argv) { QApplication appli(argc,argv); appli.setMAinWindow(new MaWindow()); return appli.exec(); }
Merci beaucoup d'avance pour vos précisions.
Partager