ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

パッケージ 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』(特に「Concurrency in Swing」のセクション)を参照してください。

関連項目

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

ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

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