如何使eclipse cdt UI Blocking代码在后台运行,并在运行完成后在编辑器中显示结果?

时间:2018-10-02 13:04:48

标签: eclipse eclipse-plugin eclipse-rcp eclipse-cdt

在Eclipse CDT的DefaultBinaryFileEditor类中,在getStorage方法中,有一条注释告诉objdump.getOutput(limitBytes)行是一个UI阻塞调用...

如何使它在没有UI阻止的情况下在后台运行,以处理比参数int limitBytes = 6 * 1024 * 1024;所声明的更长的文件

我可以通过plugin.xml扩展点“ org.eclipse.cdt.core.BinaryParser”访问org.eclipse.cdt.utils.Objdump类的getOutput方法。

我尝试通过我的plugin.xml将ID为“ org.eclipse.cdt.ui.binaryEditor”的编辑器标记中扩展点“ org.eclipse.ui.editors”中使用的类替换,但这没有工作了。

1 个答案:

答案 0 :(得分:0)

我在方法getStorage的外部类和内部类BinaryFileEditorInput中放置了一个布尔标志,我放置了一个Job,在此工作生效之前,我创建了一个空的fStorage = new FileStorage。我退回了这空空的仓库。因此,首先编辑器变得空白。然后,当objdump.getOutput(limitBytes)方法返回作业时,我将fStorage设置为返回的输出。我只是简单地调用外部类的refresh方法。我在外部类构造函数中将创建的外部类的引用放入内部静态类。这样,我可以访问刷新方法。另外,我将fStorage变量移到了外部类,因为刷新方法会触发创建新的内部类,从而覆盖有价值的fStorage变量。

最后,如果要在再次构建项目时更新打开的elf文件编辑器,请在调用刷新方法之前,将布尔变量和fStorage分配给方法resourceChanged中的第一个值。