Почему я должен добавить статический метод в main, а не иначе?

Почему так работает:

public class Main {
    public static void main(String[] args) {

        Frame_Panel();
    }

    private static void Frame_Panel() {

    }
}

а так нет?

public class Main {
    public static void main(String[] args) {

        Frame_Panel();
    }

    private  void Frame_Panel() {

    }
}

Ответы (2 шт):

Автор решения: proffessor17

Ты должен использовать static в main или в методе Frame_Panel(), потому что main вызывается без создания объекта. Если не хочешь делать Frame_Panel() статическим — нужно сначала создать объект класса Main.

→ Ссылка
Автор решения: Nowhere Man

Метод main является статическим в классе Main, а значит, из этого метода можно вызывать только другие статические методы класса Main, о чём, собственно, и говорится в ошибке компилятора для второго примера кода:

Main.java:4: error: non-static method Frame_Panel() cannot be referenced from a static context
        Frame_Panel();
        ^

т.е. вызов нестатических методов из статического контекста запрещён.

Нестатические методы можно вызывать только у экземпляра некоего класса, в данном случае класса Main, который можно создать при помощи конструктора по умолчанию.

Однако исходный код следует исправить, используя стандартное соглашение о наименовании Naming Convention, для чего придётся переименовать метод в buildFramePanel(), так как по стандартному соглашению имена всех методов (статических и нестатических) начинаются с малой буквы (нижний верблюжий регистр, lowerCamelCase), а классов, интерфейсов и конструкторов -- с большой буквы (верхний верблюжий регистр, UpperCamelCase)

public class Main {
    public static void main(String[] args) {
        new Main().buildFramePanel();
    }

    private void buildFramePanel() {

    }
}

Также стоит заметить, что название метода Frame_Panel() в исходном вопросе больше похоже на вызов конструктора соответствующего класса, соответственно, исходный код можно было бы переписать следующим образом:

public class Main {
    public static void main(String[] args) {
        new FramePanel();
    }
}

class FramePanel {
    // есть конструктор по умолчанию
}
→ Ссылка