2

Swing で新しいイベント ディスパッチ スレッドを作成したいと考えています。これを行う方法についてオンラインで参考文献を見つけるのに苦労しています。新しいスレッドを作成し、Application.run(...) を呼び出すことで、.NET でこれを行いました。誰かがこれをしましたか?Swingで可能ですか?

参考までに、私がこれをやろうとしている理由は、Eclipse プラグインを作成していて、IDE に対してモーダルではなく、UI ロジックに対してモーダル (ブロック) であるダイアログをポップアップしたいからです。非モーダル ダイアログとコールバックを使用してこれを実現できますが、それにはコードをマルチスレッド化するオーバーヘッドが必要です。前者が不可能な場合は、それに戻ります。

4

3 に答える 3

5

はい、可能です。Swing でこのような複数の EDT ディスパッチ スレッド ロジックを実行しました。ただし、最終的な結果は、確実に機能しないということでした。

(a) すべての JVM が複数の EDT スレッドで適切に動作するわけではありません (ネイティブ コードのグラフィックス レンダリング ロジックの同期の問題など、IBM JVM は複数の EDT スレッドで失敗し、Sun JVM & Apple JVM は動作しました)

(b) Swing レンダリング ロジックには、ランダムなレンダリング エラーが発生する原因となるバグがほとんどありません (たとえば、http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6727829 )。

とにかく、これを行うには基本的に、それぞれ独自の EDT スレッドを持つ 2 つの AppContext を確立する必要があります。

于 2009-08-12T11:16:51.327 に答える
4

Swing について言及しているのに、Eclipse プラグインを作成していると言うので、私はあなたの質問に少し混乱しています。質問には Swing のタグが付けられているので、Swing で回答します (ただし、CW として投稿されます)。

1 つのイベント ディスパッチ スレッドがあります。まったく存在しない場合を除き、イベント ディスパッチ スレッドは常に 1 つです。別のものを作成することはできません。

ただし、ModalityTypeダイアログの を変更したりModalExclusionType、ウィンドウの を変更したりすることはできます。この場合、これをすべて自分で作成する場合は、トップレベル ウィンドウを に設定ModalExclusionTypeしますAPPLICATION_EXCLUDE

しかし、繰り返しになりますが、Eclipse は Swing の代わりに SWT を使用しているため、これがどのように役立つかわかりません。

于 2009-05-13T17:35:12.887 に答える
2

前回の回答を破棄して、新たに始めます。

SWT では、作成時に SWT.PRIMARY_MODAL スタイル フラグを渡すことで、親に対してモーダルなShells (ウィンドウ) またはカスタムs を作成できます。Dialog

Dialogこれは抽象クラスなので、独自に作成する必要があることに注意してください。おそらく使いやすいShellです。

編集:

なぜSWT?それがEclipseが使用するものだからです。詳細については、Eclipse プラットフォーム プラグイン開発者ガイド(圧縮された PDF) を参照してください。最新バージョンは、Eclipse のヘルプ システム ([ヘルプ] > [ヘルプ コンテンツ] > [プラグイン開発環境ガイド]) で入手できます。

于 2009-05-13T17:59:16.467 に答える