SWT Browser组件阻止SWT UI线程

时间:2013-03-13 10:35:42

标签: browser swt block vaadin

我将org.eclipse.swt.browser.Browser嵌入到修改过的eclipse(Indigo)的视图中,用作表单编辑器组件的预览窗格。在表单模型更改或元素选择更改时,代码通过vaadin 6呈现表单并将其显示在浏览器组件中。

现在,在大多数情况下,这就像魅力一样。但是对于一些高度复杂的表单,vaadin生成的HTML + JS会对浏览器产生很大的压力,使其在几秒钟内无响应。这本身并不是悲剧性的(1),但只要SWT Browser组件忙于渲染这些东西,就会阻止整个eclipse UI线程。

重现此方法的一种简单方法是创建一个阻止javascript函数内部的HTML页面(有关示例,请参阅https://gist.github.com/creinig/5150747)并在SWT浏览器中显示它。只要JS函数正在运行,整个SWT应用程序就不会响应任何内容。

我在这个问题上找到的唯一信息是

没那么有帮助:(

浏览器组件的API docs似乎无法提供有关其呈现是由UI线程定期触发还是自身触发阻止UI的内容的任何见解。

有没有办法将浏览器组件的渲染与SWT UI线程分离?或者其他任何可以保护eclipse UI不被挂在浏览器中的东西?


(1):我们需要这种复杂程度的形式,我们已经在优化渲染性能,切换到vaadin7很可能也会加快速度。但问题肯定会持续存在,只要严重程度降低。

1 个答案:

答案 0 :(得分:0)

不是真正的解决方案,而是Work For Me(TM)的解决方法: 如上所述here,从SWT启动系统的默认浏览器非常容易。因此,我要在包含浏览器控件的视图中添加一个选项,该选项将会分离"分离"通过禁用浏览器控件并打开系统浏览器来查看视图。

如果链接的网页从网上掉落,请点击这里:

org.eclipse.swt.program.Program.launch("http://my.funny.url/");

启动为HTTP URL注册的应用程序。换句话说:系统默认浏览器。 随之而来的是幸福:)