我有一個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