私は主に、EclipseでUI開発を行ってきました。これはスレッドアクセスの点で非常に控えめです:UIウィジェットの外からUIウィジェット(例えば、色、テキスト)上のプロパティを変更しようとする試み例外。Swingのスレッドポリシーに違反するとどうなりますか?
私は現在、多数のカスタムウィジェットを持つウィンドウを持つSwingの既存のプログラムを見ています。これらのウィジェットのそれぞれに対して突然変異関数を実行する別個のスレッドがあり、突然変異関数はいくつかの値(例えば、ラベルの色および値)を読み取り、いくつかを書き込む(例えば、背景色を変更する)。カスタムペインティングが関与していない、またはそのようなものはないことに注意してください。それに含まれるサブウィジェットには、ほとんどがJLabelです。
現在のところ、これは別のスレッドから実行され、Swingイベントスレッドからは実行されません。このスレッドは、すべての400ウィジェットを処理し、それぞれのウィジェットを呼び出します。更新は正しく動作するようですが、GUIはユーザー入力に応答しません。
スイングスレッドの外側から約0.4ミリ秒間実行され、invokeLaterまたはinvokeAndWaitのミューテータへのすべての呼び出しをラップすると、UIは非常に反応します。
私が理解しようとしているです:
1)が、それは時々正当なSwingのスレッドの外から、これらすべての電話をかけることですか?
2)Swingスレッドにどのような影響があり、外部から呼び出したときにUIが応答しにくいのはなぜですか?