Понимание объема кода, вызываемого в потоке диспетчеризации событий Java - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь понять, какие события будут управляться из потока отправки событий (EDT).

Предположим, что-то простое, простой кусок кода, который просто открывает JOptionPane, ждет ответа пользователя, а затем закрывает его. Какие события, связанные с этим объектом, теперь помещены в EDT? Это: а) Просто создание объекта (JOptionPane). б) Все связанные с объектом события за время существования объекта. C) Что-то еще (пожалуйста, уточните).

Спасибо,

Эллиот

См. Ниже:

        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run(){
                    JOptionPane.showMessageDialog(myComponent, msg);
                }
            });
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Насколько я помню, все следующие "события" будут выполняться в EDT:

  • все события, вызванные непосредственно конечным пользователем (события мыши, ключевые события) и все события более высокого уровня, вызванные этими действиями (действие, фокус ...); на самом деле можно сказать, что все AWT и Swing EventListener всегда вызываются в EDT
  • весь код рисования (вызванный изменениями в компонентах или изменением размера или положения вдов, когда область должна быть нарисована)
  • любой код, вызываемый через SwingUtilities.invokeAndWait() или SwingUtilities.invokeLater().
1 голос
/ 16 октября 2011

Все JOptionPane диалоговые окна являются модальными: они блокируют сгенерированные пользователем входные события для других окон, но EventQueue продолжает обрабатывать события для всех окон. В этом DialogTest анимация продолжается, пока JOptionPane.showMessageDialog() ожидает ввода. Здесь есть связанное обсуждение здесь .

...