使用工作区选择对话框启动Eclipse RCP产品应用程序的多个示例

bkkx9g8r  于 2023-11-18  发布在  Eclipse
关注(0)|答案(1)|浏览(125)

我正在开发一个Eclipse RCP产品应用程序,当从Eclipse启动多个示例时,我希望实现类似于Eclipse IDE的行为。具体来说,我希望:
1.从可执行文件(exe)启动应用程序的第一个示例。第一个示例应在与可执行文件相同的目录中创建工作区。
1.从Eclipse图标启动其他示例,我希望这些示例中的每一个总是提示用户选择或创建一个工作区,就像Eclipse IDE中的工作区选择对话框一样。
我已经尝试将此参数添加到email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)/workspace中
在我的myapplication.ini -vmargs email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)/myappln-workspace中
如何在Eclipse RCP产品应用程序中实现此行为?
我使用Eclipse版本:2022-12(4.26.0)

7nbnzgx9

7nbnzgx91#

我通过实现IApplication #start解决了这个问题

public class Application implements IApplication {

import org.eclipse.ui.internal.ide.ChooseWorkspaceData;
import org.eclipse.ui.internal.ide.ChooseWorkspaceDialog;   
@Override
    public Object start(IApplicationContext context) throws Exception {
        Display display = PlatformUI.createDisplay();
        Location instanceLoc = Platform.getInstanceLocation();
        // look and see if there's a splash shell we can parent off of
        Shell shell = WorkbenchPlugin.getSplashShell(display);
        try {
            URL url = new File(System.getProperty("user.home"), "workspace").toURI().toURL();
            ChooseWorkspaceData data = new ChooseWorkspaceData(url);
            ChooseWorkspaceDialog dialog = new ChooseWorkspaceDialog(shell, data, true, true);
            dialog.prompt(true);
            String selection = data.getSelection();
            if (selection != null) {
                if (!instanceLoc.isSet()) {
                    url = new File(selection).toURI().toURL();
                    if (instanceLoc.set(url, true)) {
                        data.writePersistedData();
                    }
                }

            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        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();
        }

    }

字符串
也要确保添加所需的依赖项,在我的情况下,我添加了这2个软件包在“导入的软件包在目录选项卡”
导入-软件包:org.eclipse.ui.internal.ide,org.eclipse.ui.internal.ide.application

相关问题