2013-03-13 77 views
2

我在修改後的eclipse(Indigo)中將org.eclipse.swt.browser.Browser嵌入到視圖中,用作表單編輯器組件的預覽窗格。在表單模型更改或元素選擇更改時,代碼通過vaadin 6呈現表單並將其顯示在瀏覽器組件中。SWT瀏覽器組件塊SWT UI線程

現在,這在大多數情況下就像一個魅力。但對於一些高度複雜的表單,由vaadin生成的HTML + JS會在瀏覽器上產生很大的壓力,使其在幾秒鐘內無響應。這本身並不是悲劇(1),但只要SWT Browser組件忙於渲染那些東西,整個eclipse UI線程就會被阻塞。

重現此操作的一種簡單方法是創建一個阻止JavaScript函數(例如參見https://gist.github.com/creinig/5150747)的HTML頁面並將其顯示在SWT瀏覽器中。只要該JS函數正在運行,整個SWT應用程序就不會對任何事情做出響應。

唯一的信息,我已經在這個問題上找到的

並不實用:(

的瀏覽器組件的API docs似乎並沒有提供關於其是否呈現由UI線程定期觸發任何見解,或者本身引發的東西,塊的UI。

有沒有辦法去耦從SWT UI線程?還是別的什麼可以做,以保護日食UI從瀏覽器掛東西瀏覽器組件的渲染?


(1):我們需要這種複雜度級別的表單,我們已經在優化渲染性能,並且轉向vaadin7很可能也會加快速度。但是問題一定會持續下去,只要降低嚴重程度。

回答

0

不是一個真正的解決方案,而是一個解決方法Works For Me(TM): 正如here所述,從SWT啓動系統的默認瀏覽器非常簡單。因此,我將向包含瀏覽器控件的視圖添加一個選項,通過禁用瀏覽器控件並打開系統瀏覽器來「分離」視圖。

如果鏈接頁面下降斷網,這裏的要點是:

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

啓動http網址註冊的應用程序。換句話說:系統默認瀏覽器。 幸福隨之而來:)