Этот код работает на EDT? - PullRequest
       1

Этот код работает на EDT?

1 голос
/ 28 августа 2010

с учетом следующего кода:

public class MainFrame extends JFrame{

  public MainFrame() throws HeadlessException {
    super();
    this.setSize(500, 400);
    this.setVisible(true);
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    JButton myButton = new JButton("Test");

    this.add(myButton);

    this.pack();

  }

  public static void main(String[] args) {     
    new MainFrame();
  }

}

Работает ли код внутри конструктора в EDT. Я думаю, что это так, потому что он выполняется «внутри» экземпляра JFrame, но мне нужно второе мнение.

Продолжая идею, если бы я создал другие элементы управления, например, в функции main (), этот код не был бы в EDT?

Спасибо!

1 Ответ

1 голос
/ 28 августа 2010

Нет. Вы вызываете конструктор из метода main, который выполняется в главном потоке.

Добавьте обычный шаблон:

public static void main(String[] args) {     
    java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
        new MainFrame();
    }});
}

Также вообще плохая идея расширять классы, которые вам не нужны (включая JFrame, JPanel и Thread). Нет необходимости объявлять HeadlessException как непроверенный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...