Eclipse plugin 启动:频繁;BundleException:状态更改正在进行”;
我需要在我的插件中听取透视图状态的变化,我正在IStartup中进行这项工作Eclipse plugin 启动:频繁;BundleException:状态更改正在进行”;,eclipse-plugin,eclipse-rcp,Eclipse Plugin,Eclipse Rcp,我需要在我的插件中听取透视图状态的变化,我正在IStartup中进行这项工作 public void earlyStartup() { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { // register perspective listener to workbench } }); } 在一个新的工作区中启动IDE,在插件更新之后,我经常看到下面的异常 !
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
有什么建议吗?我建议最好在透视工厂插件激活器类start()方法中调用。这将避免你所面临的错误 在start()方法的末尾调用此函数。这不会影响插件加载的性能
Job job = new UIJob("Add Perspective listener") {
public IStatus runInUIThread(IProgressMonitor monitor) {
addPerspectiveListener();
return Status.OK_STATUS;
}
};
job.setSystem(true);
job.schedule();
最后,在bundle启动后,我将使用我的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
}
}
}
这就解决了类加载问题。你的插件激活器
启动方法有什么作用吗?是的,它完成了一些任务。但是它们都不耗时。建议在BundleListener中添加透视侦听器吗?Hi Kondal,谢谢你的建议!你能解释一下这在插件加载序列中什么时候起作用吗?这会让你明白-我已经在start()的末尾添加了UIJob,但我怀疑该作业是否正在运行!在runInUIThread()开始处放置的断点永远不会命中!!也通过放置打印语句进行检查,作业已安排但从未运行。我有什么遗漏吗?不可能!。我相信插件本身不会被调用。在start()中放置一个调试点,并查看它是否被调用。start(上下文){…Job Job=new UIJob(“添加透视侦听器”){public IStatus runInUIThread(IProgressMonitor monitor){logInfo(“作业运行”);addPerspectiveListener();return Status.OK_Status;};Job.setSystem(true);logInfo(“JOB scheduled”);JOB.schedule();}插件已被调用,并且“JOB scheduled”已打印在日志中,但在日志中找不到“JOB running”,即使在我的插件开始运行之后!!