Поток не возвращается обратно из SwingUtilities.invokeLater в основной поток - PullRequest
1 голос
/ 30 марта 2012

Я пишу свой код на качелях.Запустить приватную функцию другого класса, которую можно вызывать в потоке awt.я просто пишу код этой функции в своем классе в потоке SwingUtilities.invokeLater.

main() {

    SwingUtilities.invokeLater(new Runnable() {

        //code of private function

    });

}

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

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

SwingUtilities.invokeLater не будет блокировать выполнение текущего потока. Если в это верится, вы можете просто сделать

System.out.println("Before");

SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            //code of private function
        }
    });

System.out.println("After");

и вы увидите Before и After, напечатанные сразу после друг друга более или менее немедленно.

(убедитесь, что вы случайно не использовали SwingUtilities.invokeAndWait.)

1 голос
/ 30 марта 2012

SwingUtilities.invokeLater(Runnable) выполнит код в EDT, как вы правильно указали. Поток main продолжает выполнение сразу после вызова invokeLater. Вы можете не видеть основной поток, если вы выполняете программу в отладчике и имеете точку останова где-то в коде, выполненном в EDT, но поток main выполняется точно.

...