Объяснение потока диспетчеризации событий Java

Недавно я начал изучать и изучать основы программирования GUI на Java.

Имея какое-то время занимался программированием, я выполнял только бэкэнд-работу или работу, и в результате ближе всего к пользовательским интерфейсам у меня была командная консоль (мне неловко, насколько мне известно).

Я использую Swing и насколько могу Это означает, что по расширению я также использую AWT.

Мой вопрос основан на этом фрагменте кода:

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
        new frame.setVisible(true);
    }
} );

Я исследовал это некоторое время, так как я хотел полностью понять этот странный фрагмент кода и наткнулся на термин «поток диспетчеризации событий» несколько раз. Поправьте меня, если я не прав но насколько я понимаю; это связано с использованием нескольких потоков и того, как Java Swing интерпретирует эти потоки. Я также понимаю, что приведенный выше код используется, чтобы убедиться, что все потоки «безопасны», прежде чем он создаст окно, следовательно, invokeLater?

Я читал, что:

«Вы можете вызывать только методы, которые работают с кадр из потока диспетчеризации событий »

, и только при определенных обстоятельствах вы можете вызывать методы, которые работают с кадром из основного метода.

Может кто-нибудь пояснить мне, что такое поток диспетчеризации событий?

Как он связан с несколькими потоками выполнения и почему эти потоки небезопасно вызывать из основного метода? Также зачем нам этот invokeLater?

Можем ли мы просто создать окно как любой другой объект?

Я наткнулся на небольшую преграду в моем исследовании, так как я не понимаю этих отношений и идей.

Кстати, мне нравится основывать свои знания на глубоком понимании, поскольку я считаю, что это приводит к наилучшему общему результату и, как следствие, к лучшим программам. Если я глубоко понимаю, как что-то работает, вы можете эффективно использовать советы и настройки, а не просто повторять их обратно в код, поэтому, пожалуйста, не бойтесь дать мне дополнительные подробные объяснения и расширить мои знания.

Спасибо.

54
задан Wolfgang Fahl 14 July 2016 в 00:03
поделиться