2013-07-23 4 views
0

Я прочитал это утверждение, что «GUI показан на EDT». Может кто-нибудь, пожалуйста, объясните мне это заявление, я знаю, что прослушиватели событий выполняются на EDT, но как GUI может отображаться на EDT.GUI показан на EDT

+4

см. Учебник Oracle [Совместимость в Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html) и прочитайте вопросы и ответы, нажав на тег EventDispatchThread (добавленный к вашему вопросу) – mKorbel

+0

Я читал, что в документе говорится, что вы не должны выполнять длительную задачу по EDT, иначе GUI может замерзнуть. Но события должны идти в очередь событий. – user2594479

+0

'(Но события должны продолжаться в очереди событий.)' EDT очищает все события за один момент до экрана, затем/после EDT пуст – mKorbel

ответ

2

Утверждение «GUI показано на EDT» является неточным и вводящим в заблуждение. Действительная правда заключается в том, что все операции с объектами GUI, включая их создание, должны происходить на EDT. Из этого следует, что все действия, приводящие к отображению элементов GUI на экране, также происходят на EDT.

0

EDT несет ответственность за все. Он принимает любые события (щелчки мыши/клавиатуры и т. Д.), А затем вызывает любые действия на основе событий. Если вы хотите что-либо сделать в пользовательском интерфейсе (показать код и т. Д. Из кода), EDT снова отвечает за его отображение на экране.

В идеале, все ваши инициализации кнопок (действия UI и т. Д.) Должны выполняться EDT, хотя это необязательно (в android это). В документе говорится, что не выполнять длительные задачи для: Как уже упоминалось, поскольку EDT обрабатывает все, если EDT занят длительной задачей, тогда любые щелчки мыши и т. Д. Не могут быть обработаны EDT, создавая зависания в опыте пользовательского интерфейса.

Смежные вопросы