Здесь есть две ситуации, когда вы должны использовать invokeLater
.
- Создание пользовательского интерфейса.
- Обновление
JLabel
.
Все создание пользовательского интерфейса должно быть сделано в EDT. В древние времена Swing говорили, что вы можете делать любое создание до show
или setVisible(true)
в главном потоке, так как до этого момента не возникало проблем с потоками. Так как это было и было сомнительно , то теперь не рекомендуется ; это может сработать - очевидно, как и в вашем случае - но нет гарантии.
Вам повезло, что setText
в JLabel
ведет себя хорошо в этом контексте. Поскольку API не гарантирует, что метод является потокобезопасным, вы должны вызывать этот метод в EDT, как и любой другой вызов методов Swing.
Итак, в заключение: у вас есть простой пример, который, кажется, работает - потому что он прост, и вам повезло. Не полагайтесь на такие «тесты», а на документацию. Если ваша витрина включает в себя представление кода, то вам необходимо перевести вызовы в EDT, чтобы не ошибаться.
Я не понимаю, почему ваш код не должен "гарантировать" использование invokeLater
.