gpt4 book ai didi

browser - SWT 浏览器组件阻止 SWT UI 线程

转载 作者:行者123 更新时间:2023-12-02 13:17:48 24 4
gpt4 key购买 nike

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

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

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

我发现的有关此问题的唯一信息是

没那么有帮助:(

API docs浏览器组件的代码似乎没有提供任何有关其渲染是否由 UI 线程定期触发或者其本身是否触发阻止 UI 的内容的信息。

有没有办法将浏览器组件的渲染与 SWT UI 线程分离?或者可以采取其他措施来保护 Eclipse UI 免于在浏览器中挂起内容?

<小时/>

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

最佳答案

不是一个真正的解决方案,而是一个适合我(TM)的解决方法:如上所述here从 SWT 启动系统的默认浏览器确实很容易。因此,我将向包含浏览器控件的 View 添加一个选项,该选项将通过禁用浏览器控件并打开系统浏览器来“分离” View 。

如果链接的页面从网上掉下来,要点如下:

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

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

关于browser - SWT 浏览器组件阻止 SWT UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com