Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 Eclipse插件:创建动态菜单和相应的处理程序?_Java_Eclipse_Eclipse Plugin_Eclipse Pde - Fatal编程技术网

Java Eclipse插件:创建动态菜单和相应的处理程序?

Java Eclipse插件:创建动态菜单和相应的处理程序?,java,eclipse,eclipse-plugin,eclipse-pde,Java,Eclipse,Eclipse Plugin,Eclipse Pde,我正试图编写一个我认为非常简单的Eclipse插件,但我真的很难找到自己的方法,因为我以前从未使用过PDE 基本上,我试图做的是在Java项目上下文菜单中添加一个子菜单,该菜单将列出项目根目录中的一组可用文件。然后,在选择其中一个子菜单项时,我希望调用处理程序并传递所选文件的名称 到目前为止,我通过向org.eclipse.ui.menus扩展点添加一个动态menuContribution,成功地使菜单正确显示。我已经定义了自己的CompoundContributionItem,它在适当的目录中

我正试图编写一个我认为非常简单的Eclipse插件,但我真的很难找到自己的方法,因为我以前从未使用过PDE

基本上,我试图做的是在Java项目上下文菜单中添加一个子菜单,该菜单将列出项目根目录中的一组可用文件。然后,在选择其中一个子菜单项时,我希望调用处理程序并传递所选文件的名称

到目前为止,我通过向org.eclipse.ui.menus扩展点添加一个动态menuContribution,成功地使菜单正确显示。我已经定义了自己的CompoundContributionItem,它在适当的目录中查找所有文件并填充菜单。这些菜单项中的每一项都连接到我的处理程序(extensedabstracthandler),并且每次选择菜单项时都会调用该处理程序。我不知道如何让我的处理程序根据选择的菜单项实际执行某些操作。如果它以某种方式传递菜单项标签的字符串就足够了,但我猜可能有更好的方法来实现这一点

我试着浏览org.eclipse.debug.ui的代码,看看它们是如何使用run/debug配置的,因为这正是我想要的。它们从项目的.launchs目录中提取.launchs文件,并将其显示在列表中。虽然代码非常复杂,而且还有很多其他与之无关的行为,所以作为一个初学者,我很难理解它。而且,他们的做法似乎与我不同,所以我的做法可能是完全错误的。任何帮助或指示都将不胜感激。

这可能会进一步帮助您(或链接下项目中的周围类)
或者可能是同一个项目中弹出菜单的另一部分

我终于自己找到了答案。在plugin.xml中,可以为每个命令指定参数,例如

<commandParameter
    id="commandParameterID"
    name="Name of the Parameter"
    optional="false">
</commandParameter>
以这种方式添加的参数可在处理程序类中访问,如下所示:

public Object execute(ExecutionEvent event) throws ExecutionException {
    System.out.println(event.getParameter("commandParameterID"));
    return null;
}
public Object execute(ExecutionEvent event) throws ExecutionException {
    System.out.println(event.getParameter("commandParameterID"));
    return null;
}