4

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

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

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

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

没那么有用:(

浏览器组件的API 文档似乎没有提供任何关于其渲染是由 UI 线程定期触发还是本身触发阻止 UI 的东西的任何见解。

有没有办法将浏览器组件的渲染与 SWT UI 线程分离?或者可以采取什么其他措施来保护 Eclipse UI 不会在浏览器中挂起东西?


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

4

1 回答 1

0

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

如果链接的页面从网上掉线,这里的要点是:

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

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

于 2013-03-13T14:12:22.677 回答