Browser SWT浏览器组件阻止SWT UI线程

Browser SWT浏览器组件阻止SWT UI线程,browser,swt,block,vaadin,Browser,Swt,Block,Vaadin,我将org.eclipse.swt.browser.browser嵌入到修改后的eclipse(Indigo)中的视图中,用作表单编辑器组件的预览窗格。在表单模型更改或元素选择更改时,代码通过vaadin 6渲染表单,并将其显示在浏览器组件中 现在,在大多数情况下,这就像一个符咒。但是对于一些高度复杂的表单,由vaadin生成的HTML+JS会给浏览器带来很大的压力,导致浏览器在几秒钟内没有响应。这本身并不悲惨(1),但只要SWT浏览器组件忙于呈现这些内容,整个EclipseUI线程就会被阻塞

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

现在,在大多数情况下,这就像一个符咒。但是对于一些高度复杂的表单,由vaadin生成的HTML+JS会给浏览器带来很大的压力,导致浏览器在几秒钟内没有响应。这本身并不悲惨(1),但只要SWT浏览器组件忙于呈现这些内容,整个EclipseUI线程就会被阻塞

重现这种情况的一种简单方法是创建一个HTML页面,该页面在javascript函数中阻塞(参见示例),并在SWT浏览器中显示它。只要JS函数还在运行,整个SWT应用程序就不会响应任何东西

我找到的关于这个问题的唯一信息是

  • 一(无决议)和
  • 一个(没有回答)
没什么帮助:(

浏览器组件的功能似乎没有提供任何关于其呈现是由UI线程定期触发,还是自身触发阻止UI的内容的洞察

有没有一种方法可以将浏览器组件的呈现与SWT UI线程分离?或者可以做些什么来保护EclipseUI不被挂在浏览器中



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

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

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

org.eclipse.swt.program.Program.launch("http://my.funny.url/");
启动为HTTP URL注册的应用程序。换句话说:系统默认浏览器。 幸福随之而来:)