フォームエディターコンポーネントのプレビューペインとして使用するために、変更されたEclipse(Indigo)のビューにorg.eclipse.swt.browser.Browserを埋め込みます。フォームモデルの変更または要素の選択の変更では、コードはvaadin 6を介してフォームをレンダリングし、ブラウザコンポーネントに表示します。
さて、これはほとんどの場合魅力のように機能します。ただし、非常に複雑なフォームの場合、vaadinによって生成されたHTML + JSはブラウザーに多くのストレスを発生させ、最大数秒間応答しなくなります。それ自体は悲劇的なことではありませんが(1)、SWTブラウザコンポーネントがそのようなもののレンダリングでビジー状態である限り、EclipseUIスレッド全体がブロックされます。
これを再現する簡単な方法は、javascript関数内でブロックするHTMLページを作成し(例についてはhttps://gist.github.com/creinig/5150747を参照)、SWTブラウザーに表示することです。そのJS機能が実行されている限り、SWTアプリケーション全体は何にも応答しません。
この問題について私が見つけた唯一の情報は
- 1つのSO質問(解決なし)および
- EclipseZoneに関する1つの質問(未回答)。
あまり役に立たなかった:(
ブラウザコンポーネントのAPIドキュメントは、そのレンダリングがUIスレッドによって定期的にトリガーされるのか、それ自体がUIをブロックする何かをトリガーするのかについての洞察を提供していないようです。
ブラウザコンポーネントのレンダリングをSWTUIスレッドから切り離す方法はありますか?または、ブラウザに何かがぶら下がるのを防ぐためにEclipse UIを保護するためにできることは他にありますか?
(1):この複雑さのレベルのフォームが必要です。レンダリングパフォーマンスはすでに最適化されており、vaadin7に切り替えると速度も向上する可能性があります。しかし、重大度が低下した場合に限り、問題は確実に持続します。