J'ai une interface graphique (sur son fil EDT) et un autre thread appelé « Recorder » créé par eventListener de l'interface graphique si un bouton est pressé:passage d'informations entre EDT et autres threads Java avec un gestionnaire
if(actionEvent.getSource().equals(ui.record)) {
if(recorderThread == null) {
recorder = new Recorder();
recorderThread = new Thread(recorder);
recorderThread.start();
}
}
En le même écouteur d'événement, j'ai également implémenté un mouseListener.
public void mouseReleased(MouseEvent mEvent) {
int x, y;
x = mEvent.getXOnScreen();
y = mEvent.getYOnScreen();
}
Je veux transmettre ces variables X et Y à mon objet enregistreur dans mon fil enregistreur lorsque la souris est cliqué. Je pense que je peux casser une solution avec des variables volatiles, mais j'ai lu quelque part que les gestionnaires peuvent être utilisés pour transmettre des informations ou invoquer des méthodes entre deux threads, et était intéressé à apprendre à ce sujet. J'ai trouvé this previous post qui a fait face à un problème similaire au mien.
La solution à la poste, cependant, m'a tout à fait embrouillé. Je pense que la personne passe les objets de fil dans le gestionnaire, de cette façon tout fil peut simplement appeler tous les objets à l'intérieur de ce gestionnaire? Par exemple:
handler(someObj);
puis dans un autre thread
handler.getSomeObj().methodInObj();
Mais je ne suis pas tout à fait sûr que ce soit la façon dont fonctionnent les gestionnaires. En outre, ils semblent également traiter du thread d'arrière-plan de Swing au lieu d'un thread séparé que l'utilisateur crée (si c'est le même concept, des excuses à l'avance). Enfin, la solution semble avoir appelé une classe Handler intégrée à la bibliothèque Java, alors que je veux écrire ma propre classe de gestionnaire pour mieux apprendre comment les threads communiquent (puisque je suis un programmeur très novice enseigné par youtube) . Si quelqu'un peut m'aider, ce serait grandement apprécié. Merci d'avance!
Qu'est-ce exactement Recorder fait en arrière-plan pendant que votre interface graphique est en marche? Quelles activités a-t-il en cours? –
En outre, vous n'envoyez jamais d'informations entre * threads * mais plutôt entre * objects *, une distinction subtile mais très importante. –
Merci pour la clarification! L'enregistreur crée simplement une liste d'objets appelés "Point" qui stockent les positions X et Y du clic de souris, à utiliser plus tard par un autoclicker. – Jeff