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