2017-03-02 4 views
0

現在オープンしているファイルのオブジェクトを使用するグラフのプラグインを開発中です。開いているファイルを変更すると、グラフが更新されます。 今、私はViewPartを拡張し、この関数を呼び出すたびにグラフを更新するクラスでsetFocus()メソッドを使用しています。 これは私が欲しいのではなく、リソースが変更されたときだけグラフを更新したいのです。私は追加する必要がある場合、私は私のプラグインのactivator.javaファイル?:プラグイン開発:プラグインのリスナーからリソースへの変更

IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
    IResourceChangeListener listener = new IResourceChangeListener() { 
     public void resourceChanged(IResourceChangeEvent event) { 
     System.out.println("Something changed!"); 
     } 
    }; 
    workspace.addResourceChangeListener(listener); 

    //... some time later one ... 
    workspace.removeResourceChangeListener(listener); 

に次のコードを配置する必要があり

link to similar question

This is like my question, but there is no answer

: 私は、このリンクを見つけましたこのコード、どこに置く?どのメソッドでactivator.javaファイルに入れますか? もしそうでなければ、私は何をする必要がありますか?

答えて

1

ビューパーツcreatePartControlにリスナーを設定します。

アクティベータは、プラグイン内の他のコードが実行されているときにのみ実行されるため、リスナをセットアップするのに適していません。

+0

ビューが閉じているときにもリスナーを削除することを忘れないでください。 – nitind

+0

リスナーはこの問題[似たような問題]のように2回呼びます(http://stackoverflow.com/questions/23875766/iresourcechangelistener-being-called-twice-with-one-change)。私はdispose()メソッドでリスナーを削除しています(IWorkbenchPartのAPIで、ワークベンチからすべてのリスナーを登録解除する必要があることがわかりました)。私はなぜそれが2回呼び出されているのか分かりませんでした(私はイベントを印刷し、それは両方の呼び出しでorg.eclipse.core.internal.resources.Workspace です)。最初のコールでは、リスナーを3回コールします。 – RoG

+0

また、リスナーは現在のファイル内の変更のみをキャッチします。しかし、別のファイルを選択した場合、リスナーは私が別のファイルに入っていることに気付かず、新しいファイルを変更して保存しない限り、ビューの前のファイルのグラフになります新しいファイルあなたは私がこの事のために必要なリスナーを知っていますか?どうもありがとうございました! – RoG

関連する問題