Utilisez le courtier d'événements pour envoyer un message aux pièces.
Dans le code d'arrêt envoyer un événement:
@Inject
IEventBroker eventBroker;
eventBroker.send("my/topic/shutdown", data);
Où data
est les données que vous souhaitez associer à l'événement shudown.
"my/topic/shutdown"
est juste un identifiant unique pour l'événement.
Utilisez la méthode send
pour envoyer l'événement de manière synchrone, utilisez post
pour envoyer de manière asynchrone.
Chaque partie peut souscrire à l'événement avec:
@Inject
@Optional
public void shutdown(@EventTopic("my/topic/shutdown") Event event)
{
....
}
Event
est org.osgi.service.event.Event
Vous pouvez également utiliser @UIEventTopic
si vous voulez que la méthode soit garantie pour fonctionner dans le thread d'interface utilisateur.
Pour gérer un clic sur le bouton 'fermer' de l'application, vous devez mettre une implémentation de org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler
dans le contexte Eclipse de la fenêtre principale. Vous pouvez le faire dans votre cycle de vie (si vous en avez un). L'événement de démarrage de l'application complète est approprié pour cela:
@Optional
@Inject
public void appStartupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE) Event event, MApplication app, EModelService modelService)
{
MWindow window = (MWindow)modelService.find("window id", app);
IEclipseContext windowContext = window.getContext();
windowContext.set(IWindowCloseHandler.class, ContextInjectionFactory.make(AppCloseHandler.class, windowContext));
Comment puis-je me connecter au butun pour envoyer l'événement? – JimmyD
Quel bouton de fermeture? –
La croix rouge sur le côté droit de l'écran (dans Windows). – JimmyD