私は2つのプラグインを使用しています:AとBと呼んでみましょう。
アプリケーションを起動すると、AはBを起動し、現在のActiveEditorというパラメータを与えます。 Bは、現在のエディタでいくつかのアクションを実行できるようになりました。この点はすべてが問題ありません。
しかし、このパラメータはAがインスタンス化された場合にのみ与えられます。したがって、現在のエディタが変更された場合、Bは変更を認識しません。
私はアクティブなエディタに2秒ごとに取得し、B. 問題にそれを設定し、Aによって開始されたスレッドを、使用しようとしました:=>Java:スレッド内でアクティブなエディタを取得する方法は?
java.lang.NullPointerException: while trying to invoke the method org.eclipse.ui.IWorkbenchWindow.getActivePage() of a null object returned from org.eclipse.ui.IWorkbench.getActiveWorkbenchWindow()
at com.highdeal.tests.cortex.eclipse.RefreshThread.run(RefreshThread.java:14)
たびは、ここで開始したスレッドのコードがある場合NullPointerExceptionプラグインA:
public class RefreshThread extends Thread {
public void run(){
while (true){
try{
Thread.sleep(1000);
IEditorPart iep = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
new SampleAction(iep);
} catch (Exception e){
e.printStackTrace();
}
}
}
}
私はプラグインAのコンストラクタに次のコードを移行する場合、それは正常に動作します:
IEditorPart iep = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
new SampleAction(iep);
お読みいただきありがとうございます。詳しい説明が必要な場合は私に相談してください。
SampleActionはプラグインBですか? BTWこのコードサンプルは、ソリューションに到達するには十分ではありませんが、これは非常に悪い方法であると言って私を止めることはありません。この場合、Observerパターンを調べる必要があります。 – Madhusudhan
あなたは正しいです、私のプラグインのSampleAction B. Observer Patternに関する情報をありがとう、私は見ていきます。幸いにも、与えられた答えの1つが私を解決に導いた。 – MedAl