Использование нового потока для dataEntryFrame и блокирование mainFrame идут против модели потоков Swing. В Swing все вызовы компонентов пользовательского интерфейса в Swing должны выполняться в потоке диспетчеризации событий. Чтобы убедиться, что это происходит во время разработки, вы можете установить менеджер перерисовок, который выдает исключение, если обнаруживает, что компоненты пользовательского интерфейса используются из другого потока. См. FEST - Проверка того, что доступ к компонентам графического интерфейса выполняется в EDT . Чтобы убедиться, что что-то происходит с EDT, вы используете SwingUtilities.invokeAndWait / invokeLater.
Ваш основной фрейм не должен (и не должен!) Ждать, пока фрейм ввода данных, а не CountDownLatch, заставит ваш фрейм ввода данных отправлять событие в MainFrame, когда это будет сделано, чтобы MainFrame может предпринять соответствующие действия, такие как обновление списка.
Просто чтобы еще больше запутать воду, сохранение данных в базу данных и выборку данных для списка в идеале не должно выполняться в потоке диспетчеризации событий. Вместо этого используйте SwingWorker для выполнения этих операций в своем собственном потоке. Однако, в отличие от правила, согласно которому все компоненты пользовательского интерфейса должны быть доступны из EDT, это правило фоновой обработки не является жестким и быстрым, но рекомендуется поддерживать отзывчивый пользовательский интерфейс - если передача данных в / из БД занимает какое-то время и это делается в потоке пользовательского интерфейса (EDT), после чего пользовательский интерфейс останавливается.
См.