IApplication.startがIApplication.EXIT_RESTARTを返す場合、3。*ベースのRCPアプリケーションが再起動されます。クラスE4Applicationは常にEXIT_OKを返すようです。
org.eclipse.ui.IWorkbenchには再起動メソッドもありますが、org.eclipse.e4.ui.workbench.IWorkbenchにはありません。
では、どうすればe4 RCPアプリケーションを再起動できますか?
IApplication.startがIApplication.EXIT_RESTARTを返す場合、3。*ベースのRCPアプリケーションが再起動されます。クラスE4Applicationは常にEXIT_OKを返すようです。
org.eclipse.ui.IWorkbenchには再起動メソッドもありますが、org.eclipse.e4.ui.workbench.IWorkbenchにはありません。
では、どうすればe4 RCPアプリケーションを再起動できますか?
この機能がe4に導入されるまで、回避策は次のようになります。IApplication実装をE4Applicationのラッパーとして使用します。このようにして、startメソッドからIApplication.EXIT_RESTARTを返すことができ、Equnioxが再起動を実行します。
ただし、この回避策は内部APIを使用することに注意してください。これは、将来変更される可能性があります。
package de.emsw.gosa.e4.application;
import org.eclipse.e4.ui.internal.workbench.swt.E4Application;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
public class MyE4Application implements IApplication {
private static MyE4Application instance;
public static MyE4Application getInstance() {
return instance;
}
private Integer exitRet = IApplication.EXIT_OK;
private E4Application e4app;
public void setRestart() {
exitRet = IApplication.EXIT_RESTART;
}
@Override
public Object start(IApplicationContext context) throws Exception {
instance = this;
e4app = new E4Application();
e4app.start(context);
return exitRet;
}
@Override
public void stop() {
e4app.stop();
}
}
再起動する場合は、シングルトンを使用して戻り値を設定できます。
@Execute
public void execute(IWorkbench workbench) {
MyE4Application.getInstance().setRestart();
workbench.close();
}
この方法で説明する方が簡単なので、ここではシングルトンを使用しました。より良い解決策は、IApplicationをOSGiサービスとして登録し、DIにハンドラーに注入させることです。
Eclipse 4.2の現在の実装では、IDがorg.eclipse.ui.file.restartWorkbenchのコマンドになり、最終的にはハンドラークラスRestartWorkbenchHandlerになります。このクラスは次のように実装されます
public Object execute(ExecutionEvent event){
PlatformUI.getWorkbench().restart();
return null;
}
つまり、PlatformUIクラスは純粋なEclipse 4ベースのアプリケーションでは使用できなくなったため、Eclipse3.xに依存します。したがって、e4アプリケーションでこのタスクを解決したい場合は、コマンドを作成し、ハンドラーを実装すると、現在、E3コードに依存することになります。
org.eclipse.e4.ui.workbench.IWorkbench
restart
Eclipse Kepler(4.3)にメソッドが追加されました。
あなたはこれを試すことができます
public void restart() {Display.getDefault().asyncExec(new Runnable(){
@Override
public void run() {
PlatformUI.getWorkbench().restart();
}
});