Swing と、GUI の更新に EDT を使用することに関して、いくつか質問があります。私はちょうどこのことについて読み始めたので、私はこの分野の完全な初心者です:
- EDT で実行する必要がある操作はどれですか? そうでない場合は、単に例外が発生していますか?
- 実際にEDTに自動的に入る特定の時間はありますか?
- を使用してタスクをスケジュールする場合、
SwingUtilities.invokeLater
それを GUI 更新タスク (EDT) の現在のキューに入れますよね? - 上記のキューへのアクセスは同期されているか、同時収集が使用されていると思われますが、2 つのバックグラウンド スレッドから 2 つの GUI 更新タスクをスケジュールすると、どちらが最初に追加されるかわかりません。たとえば、スレッド 1 FIRST が JLable のテキストを「yes」に設定するタスクを送信し、その後すぐに 2 番目のスレッドが来て、その値を「no」に設定するタスクを送信した場合、次のことが保証されます。結果は「はい」になりますか、それとも単に OS によってこれらがどのようにスケジュールされているかの問題ですか?
done()
SwingWorker は、メソッドが EDT で実行されることをどのように保証しますか? 次のコードを設定します。future = new FutureTask<T>(callable) { @Override protected void done() { doneEDT(); setState(StateValue.DONE); } };
それで、FutureTaskが何らかの方法でそれinvokeLater
が呼び出されることを確認するかどうか疑問に思っていましたか?
ご回答ありがとうございます。