2017-04-25 145 views
0

我正在为Eclipse Luna开发一个插件,我想为一些视图添加一些侦听器,并且我知道如何去做。我的问题是在哪里做?eclipse插件启动后的调用方法

我需要在插件启动后立即添加它们。所以我在想,当插件被加载时,必须有某种方法被调用,我只是无法在文档中找到它。到目前为止,我尝试在Activator类中的public void start(BundleContext context) throws Exception方法中添加此听众,但它不起作用。我认为ui部分在那个时候还没有加载,这就是为什么它失败了。

回答

1

插件的Activator start方法不会运行,直到使用插件中的其他内容,因此这不适合放置侦听器。默认情况下插件在Eclipse初始化期间不加载,只在需要时加载。

您可以使用org.eclipse.ui.startup扩展点来定义实现IStartup的类,该类将在Eclipse初始化期间运行。

请注意,此界面定义的earlyStartup方法可能在UI初始化之前运行。使用类似下面从earlyStartup运行UI代码:

Display.getDefault().asyncExec(new Runnable() { 
    public void run() { 
    // UI code 
    } 
}); 

例如,以获得选择的服务。

@Override 
public void earlyStartup() 
{ 
    Display.getDefault().asyncExec(new Runnable() { 
    @Override 
    public void run() { 
    final ISelectionService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService(); 
    System.out.println("service " + service); 
    } 
}); 
} 
+0

席力图召PlatformUI.getWorkbench()getActiveWorkbenchWindow()getSelectionService。 ();以获得选择服务,但它会抛出NPE。 –

+0

只要您在asyncExec Runnable中完成所有工作,就可以工作 - 请参阅答案中的其他示例。 –

+0

它没有为我工作,所以我刚刚创建了UIJob,将所有内容放入其运行方法并安排它。 –