ユーザーがアプリケーションを再実行しようとすると、最初の実行でのみ実行されるrcpアプリケーションがありました.2番目のインスタンスは、ソケットを介してソケット上の引数を最初にサーバーとして機能し、サイレントモードで終了するインスタンス。最初のインスタンスはそのメッセージを受け取ってデコードし、それらの引数で呼び出されたかのように動作します。RCPアプリケーションの以前のインスタンスを表示
これまでのところ、2つのインスタンス間で引数を渡すための内部プロトコル仕様を作成しました。
最初のインスタンス(RCPアプリケーション)を前面に表示できませんでした。それだけで、
これは私の以前のquestion
に継続して、私は前のポストに行われた変更は、アプリケーションクラスのメソッド行の下
public Object start(IApplicationContext context) throws Exception {
if (!ApplicationInstanceManager.registerInstance()) {
return IApplication.EXIT_OK;
}
ApplicationInstanceManager
.setApplicationInstanceListener(new ApplicationInstanceListener() {
public void newInstanceCreated() {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
System.out.println("New instance detected...");
//Display.getCurrent().getActiveShell()
.forceActive();// this gives null
// pointer exception
// hence commented
}
});
}
});
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART)
return IApplication.EXIT_RESTART;
else
return IApplication.EXIT_OK;
} finally {
display.dispose();
}
}
を持って私を停止して開始されている最小化した状態でありますフロント
Display.getCurrent().getActiveShell().forceActive();
への適用がgetActiveShell(ATヌルポインタ例外を生成する)
私は前のインスタンスを最大化するか前面に持っていくことができます
、あなたが使用可能な任意のポートを使用し、他の人が読み取ることができるファイルにそのポートを書き込むことができます。場所は、通常のようなコードを使用して、あなたのアクティベーターから取得され
org.eclipse.osgi.service.datalocation.Location.isSet()
とorg.eclipse.osgi.service.datalocation.Location.lock()
を使用したOSGiのインスタンスの場所それ。 forceActive()は、OSが完全にフォローしない要求であることに注意してください。 –
@raghav:そうではありません。アプリケーションに静的なブール値を追加します。 –
@Gilbert Display.getCurrent()。getActiveShell()。forceActive(); はnullpointer例外を生成しています – srk