SwingWorker (Socket Server を実行する) を起動する Swing プログラムをコーディングしました。JTextArea.append(String) を使用して、Socket Server が受信したデータで更新される Swing GUI に JTextArea があります。
Swing GUI で JTextArea を更新する正しい/スレッドセーフな方法ですか? パブリッシュ/プロセスの使用についてはどうですか?
SwingWorker (Socket Server を実行する) を起動する Swing プログラムをコーディングしました。JTextArea.append(String) を使用して、Socket Server が受信したデータで更新される Swing GUI に JTextArea があります。
Swing GUI で JTextArea を更新する正しい/スレッドセーフな方法ですか? パブリッシュ/プロセスの使用についてはどうですか?
SwingWorker は通常、一度だけ実行される長いプロセス (完了するまでに数ミリ秒以上かかるプロセス) に使用されます。永続的な接続がある場合は、プロセスを実行する専用の ExecutorService を使用する方が適切です。次に、swing コンポーネント呼び出しを更新する場合
SwingUtilities.invokeLater(new Runnable() {
public void run() {
.. update here
}
}
これは、SwingWorker が固定のスレッド プール サイズを使用するためです。そのため、完了しないプロセスがある場合、他の SwingWorker が同時に使用できるスレッドの数が制限されます。