11
votes

Comment mettre en œuvre des rappels dans Java

J'ai une classe appelée communicationManager qui est responsable de la communication avec le serveur.

Il inclut des méthodes login () et OnLoginResponse () . En cas de connexion de l'utilisateur, la méthode Connexion () doit être appelée et lorsque le serveur répond à la méthode OnloginResponse () est exécuté.

Qu'est-ce que je Voulez-vous faire est de lier des actions avec l'interface utilisateur. Dans la classe d'interface graphique, j'ai créé une instance de communicationManager appelée MCommunicationManager . De la classe d'interface graphique, la méthode login () est simplement appelée par la ligne xxx

ce que je ne sais pas comment faire est de lier la méthode de la méthode de Classe d'interface graphique à OnloginResponse () . Par exemple, si la classe d'interface graphique comprend la méthode notifyuser () qui affiche le message reçu de theserver.

J'apprécierais vraiment si quelqu'un pouvait montrer comment exécuter des méthodes pour exécuter La méthode de la classe d'interface graphique (ex. gui.notifuser () ) lorsque l'instance de la classe mcommunicationmanager reçoit le message du serveur et de la méthode communicationmanager.onloginResponse () est exécuté.

merci!


2 commentaires

Pourquoi personne n'a dit à propos de l'appel http pour cette fonction de rappel impliquant Swing?


Question d'un débutant. Pourquoi pouvez-vous faire système.out.print (mcommunicationmanager.login ()); (Supposons, imprimer le message du serveur est la tâche)? Je comprends le cas d'utilisation dans un modèle multi-threadé mais je ne peux pas visualiser le scénario de connexion dans un modèle multi-fileté.


4 Réponses :


1
votes

Vous pouvez regarder les extraits SWT (regarder les auditeurs)

http://www.eclipse.org/swt/snippets/

ou vous utilisez la classe exécutable, en écrasant la méthode d'exécution avec votre code 'Callback'-Code lorsque vous créez une instance


0 commentaires

1
votes

Autant que je sache, Java ne prend pas en charge la contraction de la méthode ou des délégués tels que C #.

Vous devrez peut-être avoir à implémenter ceci via des interfaces (par exemple comme un auditeur de commandement.).

Peut-être que ce site sera utile:

http://www.javaworld.com/javaworld/javatips/jw -javatip10.html


0 commentaires

3
votes

L'idiome utilisé dans Java pour obtenir un comportement de rappel est des auditeurs. Construire une interface avec des méthodes pour les événements que vous souhaitez, disposez d'un mécanisme d'enregistrement de l'objet à l'écoute avec la source des événements. Lorsqu'un événement survient, appelez la méthode correspondante sur chaque auditeur enregistré. Ceci est un modèle commun pour les événements AWT et SWING; Pour un exemple choisi au hasard, voir FocusListener et la correspondante objetezent objet .

Notez que tous les événements de Java AWT et Swing Héritez en fin de compte de EventObject et la Convention consiste à appeler l'écoute quelque choselistener et l'événement QuelqueEvent . Bien que vous puissiez vous échapper avec votre code, tout ce que vous voulez, il est plus facile de maintenir le code qui collez avec les conventions de la plate-forme.


0 commentaires

25
votes

Il y a deux motifs ici, je peux vous voir utiliser. L'une est la Publier / Souscrire Modèle d'observateur mentionné par Pete. Je pense que c'est probablement ce que vous voulez, mais voyant que la question mentionne la liaison d'une méthode d'exécution ultérieure, je pensais que je devrais mentionner le Modèle de commande .

Le modèle de commande est essentiellement un travail autour du fait que Java ne traite pas les méthodes (fonctions) comme des objets de première classe et il est donc impossible de les transmettre. Au lieu de cela, vous créez une interface qui peut être transmise et qui encapsule les informations nécessaires sur la manière d'appeler la méthode d'origine. P>

Donc pour votre exemple: p>

public void login() {
    command.execute();
}


0 commentaires