1

私はこのコードスニペットを持っています

import javax.swing.SwingUtilities;

public class Client1 {

    public static void main( String[] args ) {

        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                //new MyWindow( "Bayog" );
                new MyWindowV2( "Bayog" );
            }
        } );   
    }
}

SwingUtilities を使用しない場合の違いは何ですか?

4

1 に答える 1

5

メソッド内のコードrunが UI 要素を変更するとします。非 UI スレッドからそのコードを実行しようとすると失敗します。すべての UI 操作は UI スレッド (イベント ディスパッチ スレッド) で実行する必要があります。

SwingUtilities.invokeLater「このコードを実行しますが、UI スレッドで実行してください」と言うことができます。そのため、UI を更新したいバックグラウンド スレッドに最適です。もう 1 つのオプションは を使用することSwingWorkerですが、UI スレッドを使用する必要があることを「認識」しているコードがバックグラウンド スレッドを設定するコードである必要があるため、これは必ずしも適切ではありません。

詳細については、Swing スレッディングのチュートリアルを参照してください。

于 2014-07-27T07:25:35.830 に答える