Пожалуйста, объясните метод invokeAndWait() в SwingUtilities. Я не могу это понять. Объясните это очень четко. Было бы очень полезно, если вы попробуете пример.
Отредактировано, чтобы добавить расширение @noob вопроса:
Что не ясно о этом?
Здесь приведен пример использования:
import javax.swing.SwingUtilities;
public class InvokeAndWaitStuff
{
public static void main(String[] args)
{
final Runnable doHelloWorld = new Runnable() {
public void run() {
System.out.println("Hello World on " + Thread.currentThread());
}
};
Thread appThread = new Thread() {
public void run() {
try {
SwingUtilities.invokeAndWait(doHelloWorld);
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("Finished on " + Thread.currentThread());
}
};
appThread.start();
}
}
Вывод:
Hello World on Thread[AWT-EventQueue-0,6,main]
Finished on Thread[Thread-0,5,main]
И почему это важно?:
Причиняет doHelloWorld.run() выполняется синхронно на AWT поток событий. Этот вызов блокирует все ожидающие события AWT были обработаны и (затем) doHelloWorld.run() возвращается. Эта метод следует использовать, когда прикладной нити необходимо обновить GUI.
Насколько я могу судить, это в основном узкое место, которое заставляет обновления графического интерфейса выполнять синхронно одним потоком, а не асинхронно несколькими потоками, которые потенциально могут быть небезопасными.