Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用文件的ActionProvider-EclipseCnf_Java_Eclipse_Eclipse Plugin - Fatal编程技术网

Java 使用文件的ActionProvider-EclipseCnf

Java 使用文件的ActionProvider-EclipseCnf,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我正在编写一个插件,它创建了一个自定义的包资源管理器,表示不同层次结构(某种虚拟文件夹)中的底层文件系统层次结构 我已经通过实现ITreeContentProvider创建了层次结构。最后一个节点应该表示一个文件及其所有操作(打开、复制、重命名…),当我返回org.eclipse.core.internal.resources.File的实例时效果非常好,但是如果我创建一个delegate/proxy类来实现IFile接口,我会看到操作,但是当我单击其中一个时,eclipse会冻结 无论如何,我

我正在编写一个插件,它创建了一个自定义的
包资源管理器
,表示不同层次结构(某种虚拟文件夹)中的底层文件系统层次结构

我已经通过实现
ITreeContentProvider
创建了层次结构。最后一个节点应该表示一个文件及其所有操作(打开、复制、重命名…),当我返回
org.eclipse.core.internal.resources.File
的实例时效果非常好,但是如果我创建一个
delegate/proxy
类来实现
IFile
接口,我会看到操作,但是当我单击其中一个时,eclipse会冻结

无论如何,我想我需要实现我自己的
CommonActionProvider
。我的问题是: 如何将相同的操作添加到一个节点,该节点将表示文件上的操作,是否有FileActionProvider?

我将遵循以下教程:

更新

我曾经尝试过按照@greg-449的建议处理适配器。但是他们都没有给我完整的菜单,我得到的最大菜单只是实现
IAdaptable
接口,并将
getAdapter()
委托给我的IFile实例。但这样做双击打开文件不起作用,最重要的是重命名、删除、移动都不在这里


我通过委托
getAdapter()
而不是试图实现
IFile
获得的菜单,您应该使用
IAdapterFactory
从UI类向底层
IFile
提供适配器

使用
org.eclipse.core.runtime.adapters
扩展点声明适配器工厂:


适配器工厂类方法类似于:

@Override
public Object getAdapter(Object adaptableObject, Class adapterType)
{
  if (adaptableObject instanceof MyFile)
   {
     // TODO get the IFile from MyFile
     return ifile;
   }

  return null;
}

@Override
public Class<?> [] getAdapterList()
{
  return new  Class<?> [] {IFile.class};
}
@覆盖
公共对象getAdapter(对象AdapterObject,类adapterType)
{
if(MyFile的AdaptiableObject实例)
{
//从MyFile中获取IFile
返回ifile;
}
返回null;
}
@凌驾
公共类[]getAdapterList()
{
返回新类[]{IFile.Class};
}
您可能还需要注册
IResource
,才能使所有菜单项正常工作


您还可以使用
IAdapterManager
界面注册工厂。

只是为了确保
com.xyz.MyFile
与我从
ITreeContentProvider
中的
getChildren
方法返回的对象相同?第二,我这样做了,但我只得到了
源代码
生成
。此外,没有调用的
IAdapterFactory
方法检查您的扩展点声明是否正确,我一开始就错了。看起来它配置正确,如果我删除扩展点,我就无法获得带有
源代码和
生成
的菜单,但是,在任何情况下,适配器的方法都不会被调用OK如果您得到的东西声明是正确的,那么仅声明适配器就足以让菜单显示,在选择菜单项之前不会调用实际代码。其他菜单项可能需要IResource或org.eclipse.core.resources.mapping.ResourceMapping的适配器。我已经更新了我的问题,您介意看一下吗。谢谢