Недавно я начал изучать и изучать основы программирования GUI на Java.
Будучи программированием некоторое время, я делал только бэкэнд-работу или работу, и в результате ближе всего к пользовательским интерфейсам была консоль управления (смущаю, что я знаю).
Я использую Swing, и насколько я могу собрать это средство по расширению, я также использую AWT.
Мой вопрос основан на этом фрагменте кода:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frame.setVisible(true);
}
} );
Я занимался этим некоторое время, так как хотел полностью понять этот странный код и несколько раз сталкивался с термином "Event-Dispatching Thread". Поправьте меня, если я ошибаюсь, но, насколько я понимаю; это связано с использованием нескольких потоков и того, как Java Swing интерпретирует эти потоки. Я также понимаю, что приведенный выше код используется, чтобы убедиться, что все потоки "безопасны" до того, как он создаст окно, следовательно, invokeLater?
Я читал, что:
"Вы можете вызывать только методы, которые работают с фреймом из потока событий-диспетчеризации"
и что только при определенных обстоятельствах вы можете вызывать методы, которые работают с кадром из основного метода.
Может кто-нибудь, пожалуйста, пояснить мне, что именно представляет собой Диспетчер событий?
Как это связано с несколькими потоками выполнения и как эти потоки небезопасны для вызова из основного метода? Также зачем нам этот invokeLater?
Можно ли просто создать окно как любой другой объект?
В моих исследованиях я попал в блок дорог, так как я не понимаю эти отношения и идеи.
Обратите внимание на то, что мне нравится основывать свои знания на глубоком понимании, поскольку я считаю, что это приводит к лучшему общему результату и, как результат, к лучшим программам. Если я глубоко понимаю, как что-то работает, вы можете использовать советы и трюки эффективно, а не просто перерастать их обратно в код, поэтому, пожалуйста, не бойтесь дать мне дополнительные подробные объяснения и расширить мои знания.
Спасибо.