Ответ 1
- Нет.
- Нет.
- Фоновая тема.
Если код, запущенный за пределами EDT, вызывает метод, определенный в GUI-классе, этот код не будет запускаться в EDT, а в вызывающем потоке.
Если код, запущенный в коде вызовов EDT, определенный в классе, отличном от GUI, этот код будет работать на EDT.
Правило состоит в том, что если вы не создаете другой поток, метод, который вы вызываете, будет выполняться в потоке, из которого выполняется вызывающий код, - потоки не соответствуют тем, какие методы классов определены.
Методы, которые будут выполняться на EDT, это прослушиватели событий, когда они вызывают Swing - не вами. (Они все еще могут быть, если вы звоните им из EDT, хотя.)
Кроме того, любой код внутри метода Runnable.run()
передан SwingUtilities.invokeLater()
и invokeAndWait()
также запускается на EDT.
Любые обычные методы, которые вы вызываете из EDT, будут выполняться на EDT.
Любой код, вызванный из созданного Thread
(независимо от того, используются ли они напрямую, или ExecutorService
, или SwingWorker.doInBackground()
), отсутствует в EDT. Ваш метод main()
также не включен в EDT.