Bonjour à tous!
Je developpe une appli basée sur RCP, utilisant plusieurs Thread, dont un de communication avec un serveur via la classe Socket.
Dans l'IHM, (dans une ViewPart), je positionne un objet Button sur lequel j'ajoute un mouseListener
Le probleme : j'ai une trace dans mon Thread de communication qui m'indique bien que chaque seconde on recoit un message du serveur (qui envoie une information de relevé d'un capteur en gros).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 MaClass extends ViewPart{ public void createPartControl(Composite parent) { monBoutton.addMouseListener(new MouseListener() { public void mouseDoubleClick(MouseEvent e) {} public void mouseDown(MouseEvent e) { if (condition) { //du code appelant des classes de service } } public void mouseUp(MouseEvent e) {} }); } }
Du moment ou je rentre dans le mouseEvent, lancé par l'IHM et donc le main thread, le thread de communication arrete de s'éxécuter, comme s'il etait "asleep", alors que son état est toujours marqué comme Running en debug.
J'ai donc l'impression que la méthode gérant l'Event interrompt l'éxécution de tous les autres thread, comme si le thread Main de rendez plus la main aux autres thread, les freezant dans l'instant, le temps du traitement de l'event.
Le probleme est que cet event utilise le thread de communication pour effectuer une action sur le serveur. Ce thread etant "freezé", la séquence de code du mouseEvent ne peut pas s'achever, bloquant l'application de facon immédiate.
J'insiste bien sur le fait que cela ne peut pas venir de mon code : dès l'event lancé et à la premiere ligne de code (au niveau du IF), je vois grace aux traces du thread de communication que celui ci est déjà interrompu.
Comment faire pour que le "roulement" entre les thread continue durant la gestion de l'event, afin que le thread de com continue son travail, permettant ainsi l'achevement de la gestion de l'event?
Partager