我有一个Eclipse E4应用程序,它有多个连接到不同的服务器。现在,当打开一个MPart时,该部分将调用服务器来接收他的数据。此外,当MPart关闭时,客户端将近距离发送到服务器,以便客户端知道客户端不需要更新数据。发送关闭应用程序的消息
现在我需要找到一种方法让MParts知道客户端正在关闭。这样他们就不会向服务器发送任何消息。这将加速客户端的关闭。
当用户单击关闭按钮时,如何将关机命令发送到Mpart?
我有一个Eclipse E4应用程序,它有多个连接到不同的服务器。现在,当打开一个MPart时,该部分将调用服务器来接收他的数据。此外,当MPart关闭时,客户端将近距离发送到服务器,以便客户端知道客户端不需要更新数据。发送关闭应用程序的消息
现在我需要找到一种方法让MParts知道客户端正在关闭。这样他们就不会向服务器发送任何消息。这将加速客户端的关闭。
当用户单击关闭按钮时,如何将关机命令发送到Mpart?
使用事件代理向零件发送消息。
在关机状态代码发送事件:
@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)
{
....
}
Event
是org.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));
我怎样才能关闭closeun发送事件? – JimmyD
什么关闭按钮? –
屏幕右侧的红色十字(在WIndows中)。 – JimmyD