私は3つすべての質問に答えようとします。まず第一に、火災が指定されていない秩序。誰かが発射する特定の命令を決して受け入れるべきではありません。特定の順序でアクションが必要な場合は、同じActionListener
に入れてください。
スイングをプログラミングするときは、ほとんど常にマルチスレッド環境になります。 Event Dispatch Thread(EDT)と呼ばれるスレッドが1つあります。これはすべてのイベントを処理するスレッドです。他の処理は別のスレッドで行う必要があります。そうしないと、Swing GUIが応答しなくなる可能性があります。
Swingの複数のスレッドの一般的なケースは、処理に時間がかかる場合があります。 (激しい計算、IO、データベース接続)あなたはEDTとは別のスレッドで頑張りたいと思うでしょう。それはあなたのGUIを応答し続けるでしょう。
Oracleネットワークには、Swingの並行性に関する優れたチュートリアルがあります。 check it outをお勧めします。
スレッドの以下の種類のスイングプログラマのお得な情報:
- 初期スレッド、最初のアプリケーションのコードを実行するスレッド。
- すべてのイベント処理コードが実行されるイベントディスパッチスレッド。 Swingフレームワークとやり取りするほとんどのコードもこのスレッドで実行する必要があります。
- 時間のかかるバックグラウンドタスクが実行されるワーカースレッド(バックグラウンドスレッドとも呼ばれます)。
スイングにおける任意のマルチスレッド質問に対する標準的な答えは、SwingWorker
を使用することです。これにより、EDTと別のスレッドでバックグラウンド作業を簡単に調整することができます。いつものように、Oracleにはgreat tutorial on how to use SwingWorker
があります。
私はSwingWorkerの直接の言及が間違っていますが、それ以外は非常に良い答えです。 – extraneon
@extraneon:yes 'SwingWorker'はSwingのマルチスレッドへの標準的な答えです。私は最後にそれに素早く叫び声を加えます。 – jjnguy
デザインの観点からは、設定された順序で実行可能な他のActionListener(または別のクラス)を登録できるActionListenerを作成することができます。 – extraneon