2009-05-06 7 views
4

私は大学のプロジェクト用のEclipseプラグインを作成しています。ユーザーが終了したときにコードを実行できる必要があり、これを行うための正しいリスナーが見つかりません。私が正常に完了したセーブ・イベントをリッスンし、これが発生したときにメソッドを呼び出す、同様のコードの例を以下に示します。Eclipseプラグインでユーザー出口をリッスンするにはどうすればよいですか?

public class ExecutionListener implements IExecutionListener{ 

private DataCollector dataCollector; 

public ExecutionListener(DataCollector dataCollector) 
{ 
    this.dataCollector = dataCollector; 
} 

public void postExecuteSuccess(String action, Object arg1) 
{ 
    if (action.equals("org.eclipse.ui.file.save")) { 
     dataCollector.writeDatabase(); 
    } 
} 

私がしたいのは、出口イベントを待ち受けて、このようなときにコードを実行するメソッドを呼び出すことができるリスナーです。私は、コードを実行する前に出口が正常に完了していることを確認することはできないだろうと思うが、「退出前の」リスナーは正常に動作するだろう。また、誰かが正しいListenerを知っている場合は、exitイベントに必要なコマンドIDを教えてもらえますか(上記の例のsaveイベントのcommandIdは "org.eclipse.ui.file.save"です)。

おかげで、ヤコブ

EDIT:javamonkey79のご質問にはお答え:

は、私はこのようなリスナーを追加します。

/* Adds a listener to listen for file save events if needed. */ 
if (executionListener == null) { 
    ICommandService service = (ICommandService) Activator.getDefault().getWorkbench(). 
    getService(ICommandService.class); 
    executionListener = new ExecutionListener(); 
    service.addExecutionListener(executionListener); 
} 
+0

参照http://stackoverflow.com/questions/515993/what-is-the-correct-way-to-add-a-shutdown-hook-for-an-eclipse-rcp-application/671532 – Uri

+0

私が尋ねた質問は、別の問題に育てられています。すなわち、JVMが不規則にシャットダウンしていることを検出する方法。たとえば、強制的にオペレーティングシステムをシャットダウンした結果です。 –

+0

このリスナーをどのように追加しましたか? – javamonkey79

答えて

5

プラグインのアクティベータークラスがstop()メソッドが含まれています。 ActivatorはPluginクラスを拡張するプラグインのクラスであり、Manifest.MFの "Bundle-Activator"タグで参照されています。 The OSGi documentation contains a description on the plugin lifecycle.

ワークスペースを閉じると、すべてのプラグインが停止します。このセクションで必要なクリーンアップコードを追加することができます。

public void stop(BundleContext context) throws Exception { 
    plugin = null; 
      // Code to clean up here... 

    super.stop(context); 
} 

The API describes when this method is called。 APIから興味深いスニペット:

注1:プラグインは が自動的に開始された場合はプラットフォームが ダウンをシャットされている場合、この方法 が自動的 プラットフォームによって呼び出されます。

UIでリスナーを使用する代わりに、このメソッドを使用する利点は、ユーザーがワークスペースから離れる方法に関係なく呼び出されることがわかります。

+0

プラグインがビルダーを提供していて、ビルダーがまだ完了していない場合、これは呼び出されますか?私は、シャットダウンが要求された場合(ユーザーがキャンセルするとライブラリが不安定な状態になり、ライブラリコードを制御しないため、修正できません)、ビルダーをキャンセルすることができます。 –

関連する問題