启动:频繁 "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 加载问题。
我需要在我的插件中监听透视状态变化,这是我在 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 加载问题。