启动:频繁 "BundleException: State change in progress"

Startup: Frequent "BundleException: State change in progress"

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

public void earlyStartup() {
  Display.getDefault().asyncExec(new Runnable() {
  @Override
  public void run() {
     // register perspective listener to workbench
  }
 });

}

在新工作区中启动 IDE,插件更新后,我经常看到以下异常。

!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 

有什么建议吗?

我建议最好在您的 Perspective factory Plugin Activator class start() 方法中调用 with 。这将避免您面临的错误。

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

Job job = new UIJob("Add Perspective listener") {
    public IStatus runInUIThread(IProgressMonitor monitor) {
        addPerspectiveListener();
        return Status.OK_STATUS;
    }
};
job.setSystem(true);
job.schedule();

最后,在捆绑包启动后,我使用 'BundleListener' 来注册 'IWindowCloseHandler' 和 'IPerspectiveListener' 等监听器。

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
   }
 }
}

这解决了 class 加载问题。