首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse RCP:如何防止RCP的多个实例启动?

Eclipse RCP:如何防止RCP的多个实例启动?
EN

Stack Overflow用户
提问于 2011-08-18 08:14:27
回答 2查看 2.3K关注 0票数 7

我在http://eclipse.geekyramblings.net/2010/12/14/preventing-multiple-instances/上读到了如何防止启动RCP的多个实例。但是当我制作我的RCP (它是基于"Hello“模板的简单RCP)并尝试启动它时,它会抛出这个错误

代码语言:javascript
复制
java.io.IOException: The location has not been set.
    at org.eclipse.core.runtime.internal.adaptor.BasicLocation.lock(BasicLocation.java:174)
    at testrcp.Application.start(Application.java:43)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1407)

我正在为Web开发人员使用Eclipse。

版本: Helios服务版本1构建id: 20100917-0705

下面是我的Application.java文件中的代码

代码语言:javascript
复制
package testrcp;

import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.service.datalocation.Location;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;

/**
 * This class controls all aspects of the application's execution
 */
public class Application implements IApplication {

    /* (non-Javadoc)
     * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
     */

    public Object start(IApplicationContext context) throws Exception {
        Display display = PlatformUI.createDisplay();

        int exitCode = IApplication.EXIT_OK;

        Location instanceLocation = Platform.getInstanceLocation();

        if (!instanceLocation.lock()) {
            MessageDialog.openError(new Shell(display), "App Title",
            "Another instance of the Application is currently running.");
        } else {

            int returnCode = PlatformUI.createAndRunWorkbench(display,
                    new ApplicationWorkbenchAdvisor());
            switch (returnCode) {
            case PlatformUI.RETURN_RESTART :
                exitCode = IApplication.EXIT_RESTART;
                break;
            default :
                exitCode = IApplication.EXIT_OK;
            }
        }

        instanceLocation.release();

        display.dispose();

        return exitCode;
    }
    /* (non-Javadoc)
     * @see org.eclipse.equinox.app.IApplication#stop()
     */
    public void stop() {
        if (!PlatformUI.isWorkbenchRunning())
            return;
        final IWorkbench workbench = PlatformUI.getWorkbench();
        final Display display = workbench.getDisplay();
        display.syncExec(new Runnable() {
            public void run() {
                if (!display.isDisposed())
                    workbench.close();
            }
        });
    }
}

对解决这个问题的任何帮助或任何建议都将是非常感谢的。

谢谢,

阿巴斯

EN

回答 2

Stack Overflow用户

发布于 2011-08-19 08:45:35

我可以通过添加这一行来使它工作。

代码语言:javascript
复制
instanceLocation.getURL();

之后

代码语言:javascript
复制
Location instanceLocation = Platform.getInstanceLocation();

但是请注意,这并不会阻止它从RCP可执行文件存在的不同文件夹中启动.有办法查一下吗?

票数 1
EN

Stack Overflow用户

发布于 2011-08-21 03:55:22

您还可以在启动应用程序时打开服务器套接字。如果打开另一个实例,请与服务器通信。如果可以通信,则可以打开正在运行的实例,留下应用程序的一个实例。

更详细的这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7104304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档