2017-04-25 11 views
0

私はEclipse Lunaのプラグインを開発していますが、いくつかのリスナーをいくつかのビューに追加したいと思います。私の質問はどこでそれを行うのですか?Eclipseプラグインが起動するとすぐにメソッドを呼び出す

プラグインの起動後すぐに追加する必要があります。だから私は、プラグインがロードされたときに呼び出される何らかのメソッドがなければならないと思っています。私はドキュメントでそれを見つけることができません。これまでのところ、このリスナーをpublic void start(BundleContext context) throws ExceptionメソッドでActivatorクラスに追加しようとしましたが、動作しませんでした。私はUiの部分がまだその時点でロードされていないと思うので、それは失敗しているのです。

答えて

1

プラグインのアクティベータstartメソッドは、プラグイン内の他のものが使用されるまで実行されないため、リスナーを配置するのに適していません。デフォルトでは、プラグインはEclipseの初期化中にロードされず、必要なときにのみロードされます。

org.eclipse.ui.startup拡張ポイントを使用して、IStartupを実装するクラスを定義して、Eclipseの初期化中に実行することができます。

このインターフェイスで定義されているearlyStartupメソッドは、UIが初期化される前に実行されることがあります。 。選択サービスを得るために例えば

Display.getDefault().asyncExec(new Runnable() { 
    public void run() { 
    // UI code 
    } 
}); 

earlyStartupからUIコードを実行するには、次のようなものを使用してください。)私はPlatformUI.getWorkbench()を呼び出そうとしましたgetActiveWorkbenchWindow(

@Override 
public void earlyStartup() 
{ 
    Display.getDefault().asyncExec(new Runnable() { 
    @Override 
    public void run() { 
    final ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService(); 
    System.out.println("service " + service); 
    } 
}); 
} 
+0

をgetSelectionService ();選択サービスを取得するが、それはNPEを投げる。 –

+0

これはasyncExec Runnableですべてのことを行う限り動作します - 答えの私の追加の例を見てください。 –

+0

私はUIJobを作成して、すべてをrunメソッドに入れてスケジュールしましたので、うまくいきませんでした。 –

関連する問題