スレッドを使用した GUI プログラミングにおけるリスナーのメカニズムは何ですか。たとえば、GUI の実行中に ActionListener/actionPerformed メソッドに関連するスレッドはありますか? ユーザー定義のスレッドに対するこれらのスレッド (存在する場合) の影響は何ですか? ユーザー定義スレッドの動作を変更しますか?
3 に答える
スレッドを使用した GUI プログラミングにおけるリスナーのメカニズムは何ですか。たとえば、GUI の実行中に ActionListener/actionPerformed メソッドに関連するスレッドはありますか?
単純な ActionListener の場合、関与するスレッドは 1 つだけです。これは、メインの Swing イベント スレッドであるイベント ディスパッチ スレッドまたは EDT です。この単一のスレッドは、すべての Swing グラフィックスとユーザー操作を担当し、ほとんどの Swing メソッド呼び出しはこのスレッドで行う必要があります (API がスレッドセーフであると述べている場合を除く)。
ご質問の残りの部分については、
ユーザー定義のスレッドに対するこれらのスレッド (存在する場合) の影響は何ですか? ユーザー定義スレッドの動作を変更しますか?
正直なところ、あなたが何について尋ねているのかわかりません。他のスレッドが Swing GUI プログラムで使用される場合があり、実際にはそれらが必要になる状況もありますが、使用する場合、コーダーは、これらのバックグラウンド スレッドからのほとんどすべての Swing 呼び出しがイベント スレッドで行われるように注意する必要があります。
何が混乱しているのか、またはこの質問の原因は何かを明確にしていただけますか?
Swing 全体に関与するスレッドは 1 つだけで、それが Event Dispatch Thread です。Swing は、他の多くの GUI フレームワークと同様にシングルスレッドです。
GUI リスナーに関与する唯一のスレッドは、イベント ディスパッチ スレッドです。
それらがセットで定義されたスレッドに影響を与えるかどうかに関しては、EDT は影響しません。