Java™ Platform
Standard Edition 7

パッケージ javax.swing

すべてのプラットフォーム上で可能なかぎり同じように機能する「軽量」(Java 共通言語) コンポーネントのセットを提供します。

参照: 説明

パッケージ javax.swing の説明

すべてのプラットフォーム上で可能なかぎり同じように機能する「軽量」(Java 共通言語) コンポーネントのセットを提供します。これらのコンポーネントの使用方法に関するプログラマ向けガイドについては、『The Java Tutorial』の「Creating a GUI with JFC/Swing」を参照してください。その他のリソースについては、「関連ドキュメント」を参照してください。

Swing のスレッドポリシー

通常、Swing はスレッドに対して安全ではありません。すべての Swing コンポーネントと関連クラスには、特に説明がないかぎり、イベントディスパッチスレッド上でアクセスしてください。

通常の Swing アプリケーションは、ユーザーのジェスチャーによって生成されたイベントに応じて、処理を実行します。たとえば、ユーザーが JButton をクリックすると、JButton に追加されたすべての ActionListeners に通知が送信されます。ユーザーのジェスチャーによって生成されたすべてのイベントはイベントディスパッチスレッド上でディスパッチされるので、開発者が制限の影響を受けることは、ほとんどありません。

ただし、Swing アプリケーションの構築時と表示時には影響があります。イベントディスパッチスレッド上では、アプリケーションの main メソッドの呼び出しや Applet 内のメソッドの呼び出しは行われません。このため、アプリケーションやアプレットの構築時および表示時には、イベントディスパッチスレッドに制御を渡していることを確認してください。制御を渡し、Swing の処理を開始するためには、invokeLater を使用することをお勧めします。invokeLater メソッドは、Runnable がイベントディスパッチスレッド上で処理されるようにスケジュールします。次に、Swing アプリケーションに制御を渡し、Swing アプリケーションを起動する例を 2 つ示します。どちらの方法も適切です。

public class MyApp implements Runnable {
    public void run() {
        // Invoked on the event dispatching thread.
        // Construct and show GUI.
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new MyApp(args));
    }
}
または:
public class MyApp {
    MyApp(String[] args) {
        // Invoked on the event dispatching thread. Do any initialization
        // here.
    }

    public void show() {
        // Show the UI.
    }

    public static void main(final String[] args) {
        // Schedule a job for the event-dispatching thread:
        // creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MyApp(args).show();
            }
        });
    }
}
この制約は、Swing コンポーネントに接続されたモデルにも適用されます。たとえば、TableModelJTable に接続されている場合、TableModel の変更は必ずイベントディスパッチスレッド上で行うようにしてください。別のスレッド上でモデルを変更した場合、例外が発生し、画面の表示が崩れる可能性があります。

すべてのイベントはイベントディスパッチスレッド上で配信されるので、イベント処理時に注意してください。特に、イベントディスパッチスレッド上で、ネットワーク入出力や計算量の多い処理など、時間のかかるタスクを実行すると、その他のイベントのディスパッチがブロックされます。イベントディスパッチスレッドがブロックされている間、アプリケーションはユーザーの入力に一切反応しなくなります。Swing の使用時にこのような処理を実行する場合は、SwingWorker の説明に従うことをお勧めします。

このトピックの詳細は、『The Swing Tutorial』(特に「How to Use Threads」のセクション) を参照してください。

関連項目

概要、チュートリアル、例、ガイド、その他のマニュアルについては、次を参照してください。

Java™ Platform
Standard Edition 7

バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.