Почему никогда не заканчивается код, содержащий EventQueue.invokeLater?

У меня есть основной класс: MyMainSDK

public static void main(String[] args) { 
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MyMainSDK frame = new MyMainSDK();
                    frame.setVisible(false);
                    System.out.println("f1"); 
                } catch (Exception e) {
                    System.out.println("Error: " + e.getMessage()); 
                    e.printStackTrace();
                }
                System.out.println("f2"); 
            }
        });


    System.out.println("f3"); 
    }

и мой класс:

    public MyMainSDK() {


           /*

             do something

                System.out.println("do something logs"); 

            */

       System.out.println("everything is finished"); 

 }

Я запускаю свой java-код в пакетном файле. Это работает, что я ожидаю.

Но батник кажется не закончен. Но я вижу эти журналы:

f3
do something logs
f1
f2

как я могу это решить?

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


person Ersin Gülbahar    schedule 02.10.2018    source источник
comment
Потому что вы запускаете поток отправки событий, который никогда не заканчивается, так как вы никогда не вызываете System.exit(). Зачем создавать кадр, никогда не показывать его и сразу же выходить?   -  person JB Nizet    schedule 02.10.2018
comment
Почему вы вообще звоните invokeLater? Создание фрейма и его отображение приведет к тому же результату, что и вы. Что вам нужно сделать, это что-то вроде frame.setDefaultCloseOperation(EXIT_ON_CLOSE).   -  person daniu    schedule 02.10.2018
comment
хорошо, я попробую frame.setDefaultCloseOperation(EXIT_ON_CLOSE)   -  person Ersin Gülbahar    schedule 02.10.2018
comment
Это свинг, да?   -  person daniu    schedule 02.10.2018
comment
это просто код Java для работы в фоновом режиме   -  person Ersin Gülbahar    schedule 02.10.2018
comment
Это приложение с графическим интерфейсом? Если это просто пакетное задание, вы можете попробовать использовать функцию многопоточности в Java, чтобы получить задание в фоновом потоке. invokeLater используется с приложениями с графическим интерфейсом. Посмотрите эти сообщения, вы можете найти то, что вам нужно: Запустить задачу в фоновом режиме и выполнить фоновую задачу в Java.   -  person prasad_    schedule 02.10.2018