3

EDT で何かを実行する必要がある場合とそうでない場合について、インターネットで多くの記事を読みました。しかし、私はまだ理解できていないので、これについていくつか質問したいと思います。

  1. EDTでデフォルトで実行されるコードは何ですか?

  2. EDT の外部でデフォルトで実行されるコードは何ですか?

  3. InvokeLater() をいつ使用して、デフォルトで EDT の外部で実行されるものを EDT の内部で実行する必要がありますか?

  4. 新しいスレッドを作成し、そのコードをその中に入れることによって、コードの一部が EDT 内で (デフォルトで) 実行されないようにする必要があるのはいつですか?

ありがとう

4

2 に答える 2

4
  1. イベント リスナーによって実行されるすべてのコード。
  2. メイン メソッド内のコード、明示的に開始したスレッド内で実行されたコード、または Timer または SwingWorker の使用によって開始されたコード。
  3. メイン メソッドで Swing GUI を作成する場合。または、バックグラウンド スレッド内から Swing コンポーネント (またはそのモデル) とやり取りしたい場合。
  4. このコードがブロックされている場合 (長い IO など)、または実行に数ミリ秒以上かかっている場合。EDT 内から実行されるすべてのコードは、このスレッドがその主な仕事 (GUI の再描画とイベントへの反応) を実行するのを妨げます。
于 2014-01-03T10:52:56.227 に答える
0

まず、質問を適切に編集およびフォーマットしていただき、ありがとうございます。あなたの質問に答えるとき、それはとても役に立ちます。

また、私は自分の答えについて 100% 確信があるわけではないことを認めなければならないので、間違っている場合は遠慮なく訂正してください。

  1. グラフィカル ユーザー インターフェイスを変更するすべてのもの。

  2. それについてはよくわかりません。

  3. 時間のかかる計算で GUI を更新する必要がある場合。たとえば、JLabel で 0 から 100000000 までの数字を表示したい場合。

  4. 多くのデータセットを使用した計算など、多くの時間がかかるため、ユーザー操作から GUI をブロックするすべてのvolatileもの
    synchronize.. .

于 2014-01-03T10:52:48.900 に答える