Eclipse RCP:文件关联(--launcher.openFile)

时间:2011-10-19 09:52:03

标签: java eclipse eclipse-plugin swt eclipse-rcp

我正在开发一个eclipse产品,我需要将文件扩展名关联到我的编辑器。 我遵循了几个例子(就像thisthis)但似乎编辑器收到了SWT OpenDocument事件。

如fileAssociation示例中所述,我创建了一个eventListener类来处理SWT.OpenDocument事件,我在我的Application类中将它添加到显示中,然后才调用PlatformUI.createAndRunWorkbench()方法

public Object start(IApplicationContext context) throws Exception {
Object args = context.getArguments().get(IApplicationContext.APPLICATION_ARGS); 
OpenDocumentEventProcessor eProc = new OpenDocumentEventProcessor();
Display display = PlatformUI.createDisplay();
display.addListener(SWT.OpenDocument, eProc);
try{
    if(!handleWorkspace(display)){
        System.exit(0);
        return IApplication.EXIT_OK;
    }
int returnCode = PlatformUI.createAndRunWorkbench(display, new XVRWorkbenchAdvisor(args, eProc));

在产品文件中,我添加了以下程序参数:

--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-name
XVR Studio Developer

如果我在一个新的空RCP项目中使用相同的代码,它就像一个魅力......

我无法弄清楚哪个可能是问题..

你可以帮帮我吗?

非常感谢!!

2 个答案:

答案 0 :(得分:2)

这种方法对我来说是未知的,但由于您的粘贴代码中没有明确的编辑器调用,我猜您仍然依赖eclipse来决定必须打开哪个编辑器。所以我猜你仍然必须以声明方式定义内容类型和文件关联。要做到这一点有助于“org.eclipse.core.contenttype.contentTypes”扩展,请添加“文件关联”(文件扩展名...)。在插件xml中获取编辑器声明,并添加以前创建的'contentTypeBinding'id。

答案 1 :(得分:1)

由于我刚刚为RCP应用程序做了这项工作,我认为记录我在这里的工作方式并提供参考资料会很有帮助。

  1. 我没有使用'context.getArguments()..','OpenDocumentEventProcessor'处理了所有事情。
  2. 我建议不起作用的原因是-name值与'org.eclipse.core.runtime.products'扩展点中'appName'属性的值不匹配。为了确保,我从appName属性和-name中删除了空格。然后它奏效了。
  3. 非常有用的参考资料是:

    基本编码: http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fproduct_open_file.htm

    有关其工作原理的说明: http://aniefer.blogspot.co.uk/2010/05/opening-files-in-eclipse-from-command.html

    一段时间没有找到我的一个小问题是,在名称中有空格的地方以几个块的形式获取文件的路径。最后我意识到(在'呃!'时刻)我需要在安装程序(InstallAware)定义中为文件关联添加%1 参数的引号 - 即它变为“% 1"