1

試験の勉強をしているときに、Java グラフィックスでよくわからない行をいくつか見つけました。それで、他のプログラムをちらっと見てチェックし始めましたが、それらの行はありませんでした。

例:

public static void main(String[] args){
  SwingUtilities.invokeLater(new Runnable(){//unknown
  public void run(){                        //lines
  JPanel panel = new DrawingPanel();
  ...
}

Runnable と run がスレッドを処理する必要があることはわかっていますが、これらの 2 つの行がなぜ、どのように機能するのかはわかりません。

4

2 に答える 2

1

Swing はシングルスレッドのフレームワークです。UI とのすべての対話と更新は、イベント ディスパッチ スレッドのコンテキスト内から実行されることが期待されます。

Java はmain、EDT 内で実行されることを保証しません (通常、これをメイン スレッドと呼んでいると思います)。したがって、UI コードのいずれかが最初にイベント ディスパッチ スレッドに同期されていることを確認する必要があります。

SwingUtilities.invokeLater、 に委任しEventQueue.invokeLaterます。Runnableこれは基本的に、イベント ディスパッチ スレッドによって処理されるイベント キューにインスタンスをポストします。

将来のある時点で、Runnableがキューから取り出され、runメソッドが EDT 内で実行されます。

詳細については、初期スレッドを参照してください

追加情報については、 The Single Thread Rule in SwingEvent-Dispatching Thread Rules for Swing UIsを参照することもできます

于 2013-08-25T11:31:40.343 に答える