2017-10-13 100 views
0

我有一个Eclipse E4应用程序,它有多个连接到不同的服务器。现在,当打开一个MPart时,该部分将调用服务器来接收他的数据。此外,当MPart关闭时,客户端将近距离发送到服务器,以便客户端知道客户端不需要更新数据。发送关闭应用程序的消息

现在我需要找到一种方法让MParts知道客户端正在关闭。这样他们就不会向服务器发送任何消息。这将加速客户端的关闭。

当用户单击关闭按钮时,如何将关机命令发送到Mpart?

回答

1

使用事件代理向零件发送消息。

在关机状态代码发送事件:

@Inject 
IEventBroker eventBroker; 

eventBroker.send("my/topic/shutdown", data); 

哪里data是要与shudown事件相关联的任何数据。

"my/topic/shutdown"只是该活动的唯一ID。

使用send方法同步发送事件,使用post异步发送。

每个部分可以订阅事件有:

@Inject 
@Optional 
public void shutdown(@EventTopic("my/topic/shutdown") Event event) 
{ 
    .... 
} 

Eventorg.osgi.service.event.Event

您也可以使用@UIEventTopic,如果你想保证该方法在UI线程中运行。

要处理应用程序“关闭”按钮的点击,您需要将org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler的实现放入主窗口的Eclipse上下文中。你可以在你的生命周期课程中做到这一点(如果你有)。应用程序启动完成事件适用于此:

@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)); 
+0

我怎样才能关闭closeun发送事件? – JimmyD

+0

什么关闭按钮? –

+0

屏幕右侧的红色十字(在WIndows中)。 – JimmyD

相关问题