2017-10-13 146 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

相關問題