1

SwingWorker (Socket Server を実行する) を起動する Swing プログラムをコーディングしました。JTextArea.append(String) を使用して、Socket Server が受信したデータで更新される Swing GUI に JTextArea があります。

Swing GUI で JTextArea を更新する正しい/スレッドセーフな方法ですか? パブリッシュ/プロセスの使用についてはどうですか?

4

1 に答える 1

3

SwingWorker は通常、一度だけ実行される長いプロセス (完了するまでに数ミリ秒以上かかるプロセス) に使用されます。永続的な接続がある場合は、プロセスを実行する専用の ExecutorService を使用する方が適切です。次に、swing コンポーネント呼び出しを更新する場合

SwingUtilities.invokeLater(new Runnable() { 
    public void run() {
        .. update here
    }
}

これは、SwingWorker が固定のスレッド プール サイズを使用するためです。そのため、完了しないプロセスがある場合、他の SwingWorker が同時に使用できるスレッドの数が制限されます。

于 2011-06-08T18:23:14.203 に答える