3

IApplication.startがIApplication.EXIT_RESTARTを返す場合、3。*ベースのRCPアプリケーションが再起動されます。クラスE4Applicationは常にEXIT_OKを返すようです。

org.eclipse.ui.IWorkbenchには再起動メソッドもありますが、org.eclipse.e4.ui.workbench.IWorkbenchにはありません。

では、どうすればe4 RCPアプリケーションを再起動できますか?

4

4 に答える 4

2

この機能が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にハンドラーに注入させることです。

于 2013-02-25T09:34:58.580 に答える
2

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コードに依存することになります。

于 2012-10-30T11:40:10.663 に答える
2

org.eclipse.e4.ui.workbench.IWorkbenchrestartEclipse Kepler(4.3)にメソッドが追加されました。

于 2013-10-21T20:43:45.147 に答える
0

あなたはこれを試すことができます

    public void restart() {Display.getDefault().asyncExec(new Runnable(){
         @Override
          public void run() {
          PlatformUI.getWorkbench().restart();
        }
    });
于 2020-04-17T08:14:15.470 に答える