public static void main(String[] args){
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            Mainwindow frame = new MainWindow();
            frame.setVisible(true);
            }

public class MainWindow extends JFrame {

public MainWindow(){
 // methods to set title, bounds, JPanels, etc.
 }

public static void methodOne(){
// updates GUI
}

public static void methodTwo(){
// also updates GUI
}

Вопрос 1: Скажем, я звоню

 MainWindow.methodOne 

Изнутри static main или из другого класса, созданного в static main.

MethadOne () запускается из EDT или из начальной темы?

Вопрос 2: ссылка на код вверху внутри метода

@Override
public void run(){
}

Лучше всего использовать:

MainWindow frame = new MainWindow();
frame.setVisibility(true);

Или просто:

new MainWindow();

И имеют

setVisibility(true)

Внутри конструктора MainWindow, учитывая, что все методы внутри MainWindow статические?

Пожалуйста, опишите все ответы, я новичок в кодировании ....

Заранее спасибо

0
Daniel Mastrorillo 10 Ноя 2017 в 13:06

1 ответ

Лучший ответ

Вопрос 1

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

Кроме того, в этом случае, поскольку у вас есть методы static, эти методы не принадлежат экземпляру frame, они принадлежат классу MainWindow.

Вопрос 2

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

Второй подход обычно используется для основного фрейма, фрейма, который вы показываете при запуске программы, вы можете поместить этот оператор в конструктор класса.

0
Titus 10 Ноя 2017 в 10:19