【发布时间】:2017-04-03 17:05:26
【问题描述】:
我正在开发一个 Eclipse 插件,用于对两个程序执行等价检查。一旦用户在项目浏览器中选择了两个程序,“初始灰显”图标就会被启用,用户可以点击它进行等价检查。
问题是,当我在 Eclipse 中安装插件时,它不会听取用户的选择。不知何故,我必须在 Eclipse 启动时“激活”我的选择类。为此,我使用了一个实现 IStartup 的类。
如果需要,这是我的选择类;
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
public class SelectionView extends ViewPart{
static ArrayList<String> paths=new ArrayList<>(2);
private ISelectionListener listener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
if (sourcepart != SelectionView.this) {
showSelection(sourcepart, selection);
}
}
};
public void showSelection(IWorkbenchPart sourcepart, ISelection selection) {
if (selection instanceof IStructuredSelection) {
IStructuredSelection ss = (IStructuredSelection) selection;
Object[] ob=ss.toArray();
String path=getPath().substring(0,getPath().lastIndexOf('/'));
String file=null;
for(int i=0;i<ob.length;i++){
if((file=ob[i].toString()).endsWith(".c")){
paths.add(0,path+"/"+file);
if(paths.size()>=2){
Handler.return_val=true;
Handler.arg1=paths.get(0);
Handler.arg2=paths.get(1);
}
}
}
}
}
public String getPath(){
IWorkbenchPart workbenchPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
IFile file = (IFile) workbenchPart.getSite().getPage().getActiveEditor().getEditorInput().getAdapter(IFile.class);
String path=ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()+file.getFullPath();
return path;
}
public void createPartControl(Composite parent) {
getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(listener);
}
public void dispose() {
getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(listener);
super.dispose();
}
@Override
public void setFocus() {}
}
有人可以帮助我如何在 Eclipse 启动时“激活”这个类吗?也就是在IStartup接口的earlyStartup()方法中写什么代码,Eclipse一启动就开始监听用户选择?
谢谢!
【问题讨论】:
-
您在此处显示的代码都是视图的一部分,您无法在 earlyStartup 中设置作为视图一部分的侦听器。您必须重构此代码,或者只在视图打开时检查选择。
-
@greg-449,有没有其他方法可以在不打开视图的情况下收听选择?请原谅我的天真,但我对 Eclipse 插件开发很陌生。但是我确实理解您所写的内容,在视图打开之前,我无法听取选择。您能建议我如何修改此代码以在早期启动时收听选择吗?
-
@greg-449 我想出了一种方法来使用您在同一问题上的许多其他答案之一。谢谢!
标签: java eclipse eclipse-plugin eclipse-rcp