2017-10-13 22 views
0

Eclipse E4アプリケーションを複数のサーバーに接続しています。 MPartを開くと、パーツはサーバーを呼び出してデータを受信します。また、MPartが閉じられると、クライアントはサーバーにクローズを送信し、クライアントは更新されたデータをクライアントに持たせる必要がないことを認識します。アプリケーションを閉じるメッセージを閉じる

ここで、MPartにクライアントがシャットダウンしていることを知らせる方法を見つける必要があります。そのため、サーバーにメッセージを送信しないようにします。これにより、クライアントのシャットダウンが高速化されます。

ユーザが閉じるボタンをクリックしたときに、Mpartにshutdownコマンドを送信するにはどうすればよいですか?

答えて

1

イベントブローカーを使用して、部品にメッセージを送信します。シャットダウンコードで

がイベントを送信します

dataあなたはshudownイベントに関連付ける任意のデータです
@Inject 
IEventBroker eventBroker; 

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

"my/topic/shutdown"は、イベントの一意のIDです。

sendメソッドを使用してイベントを同期的に送信し、postを使用して非同期に送信します。

各部分はしてイベントをサブスクライブすることができます:あなたはメソッドはUIスレッドで実行されることが保証されるようにしたい場合にも@UIEventTopicを使用することができます

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

Eventorg.osgi.service.event.Event

です。

アプリケーションの「閉じる」ボタンをクリックして処理するには、メインウィンドウのEclipseコンテキストにorg.eclipse.e4.ui.workbench.modeling.IWindowCloseHandlerの実装を入れる必要があります。ライフサイクルクラスでこれを行うことができます(もしあれば)。アプリケーション起動完了イベントは、これに適しています。

@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

イベントを送信するにはどうすればよいですか? – JimmyD

+0

閉じるボタンは何ですか? –

+0

画面右側(WIndows)の赤い十字線です。 – JimmyD

関連する問題