我将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很可能也会加快速度。但问题肯定会持续存在,只要严重程度降低。
答案 0 :(得分:0)
不是真正的解决方案,而是Work For Me(TM)的解决方法: 如上所述here,从SWT启动系统的默认浏览器非常容易。因此,我要在包含浏览器控件的视图中添加一个选项,该选项将会分离"分离"通过禁用浏览器控件并打开系统浏览器来查看视图。
如果链接的网页从网上掉落,请点击这里:
org.eclipse.swt.program.Program.launch("http://my.funny.url/");
启动为HTTP URL注册的应用程序。换句话说:系统默认浏览器。 随之而来的是幸福:)