首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动:频繁的"BundleException:状态更改正在进行“

启动:频繁的"BundleException:状态更改正在进行“
EN

Stack Overflow用户
提问于 2016-04-13 10:23:11
回答 2查看 138关注 0票数 1

我需要听取插件中透视图状态的变化,这是我在IStartup中所做的。

代码语言:javascript
复制
public void earlyStartup() {
  Display.getDefault().asyncExec(new Runnable() {
  @Override
  public void run() {
     // register perspective listener to workbench
  }
 });

}

在一个新的工作区中启动IDE,在插件更新之后,我经常在下面看到异常。

代码语言:javascript
复制
!MESSAGE While loading class "com.test.Startup", thread "Thread[Worker-2,5,main]" timed out waiting (5008ms) for thread "Thread[Thread-6,5,main]" to finish starting bundle "test.startup [55]". 
To avoid deadlock, thread "Thread[Worker-2,5,main]" is proceeding but "com.test.Startup" may not be fully initialized.
!STACK 0
org.osgi.framework.BundleException: State change in progress for bundle 

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-12 09:13:44

最后,在包启动后,我将使用“BundleListener”注册侦听器,如“IWindowCloseHandler”和“IPerspectiveListener”等。

代码语言:javascript
复制
public class StudioBundleListener implements BundleListener {
@Override
   public void bundleChanged(BundleEvent event) {
   String symbolicName = event.getBundle().getSymbolicName();
   int type = event.getType();
   if(symbolicName.equals(MYPlugin.PLUGIN_ID) && type == BundleEvent.STARTED) {
     //Register my listeners
   }
 }
}

这解决了类负载问题。

票数 1
EN

Stack Overflow用户

发布于 2016-04-13 12:35:49

我建议最好在透视工厂插件Activator类start()方法中调用它。这将避免你所面临的错误。

在start()方法的末尾调用它。这不会影响插件加载的性能。

代码语言:javascript
复制
Job job = new UIJob("Add Perspective listener") {
    public IStatus runInUIThread(IProgressMonitor monitor) {
        addPerspectiveListener();
        return Status.OK_STATUS;
    }
};
job.setSystem(true);
job.schedule();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36595500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档