Moin!
LifecycleManager.getDefault().exit() sollte entweder aus dem Thread gestartet werden, der per notifyLater aufgerufen wurde oder in Ausnahmefällen in SwingUtilities.invokeLater (...). Zwar handelt es sich in beiden Fällen um den EventDispatcherThread (das ist sowieso Pflicht), aber so weit in den Event-Queue nach hinten geschoben, dass es keine Deadlocks geben sollte.
Warum Dein Login-Dialog Probleme bekommt, wenn notifyLater verwendet wird, kann ich nicht sagen. Vermutlich wurden schon zu viel Module aktiviert, die irgendwelche Seiteneffekte verursachen. D.h. aber (da die Modulaktivierung global nicht deterministisch ist), dass Dir das Problem später wieder auf die Füße fallen kann, wenn sich mal die Ladereihenfolge verändert hat.
Beispiel, wo M5 zwingend Logindaten benötigt
Ladereihenfolge mit notifyM3, M1, M2,
M-Login ->
notify -> Login Daten abfragen, Ok -> M4,
M5, M6 -> Main-Window
Ladereihenfolge mit notifyLaterM3, M1, M2,
M-Login ->
notifyLater -> M4,
M5, M6 -> Login Daten abfragen, Ok -> Main-Window
Jetzt Wochen später mit notify:M3, M1, M2,
M5,
M-Login ->
notify -> Login Daten abfragen, Ok -> M4, M6 -> Main-Window
Nun mal ein Abbruch per exit direkt aus notify:M3, M1, M2,
M-Login ->
notify -> Login Daten abfragen, Cancel -> exit() [...Modul System greift auf diese M's zu]-> M4,
M5, M6
Da LifecycleManager.getDefault().exit() im EDT ist und das ModulSystem in einem extra Thread die Module lädt bekommst Du (wie schon beobachtet) manchmal einen Deadlock.
Du musst also deine Abhängigkeiten sauber bekommen. Logindaten ggf. ausschließlich per Services anfordern (z.B. Lookup.getDefault().lookup (Account.class)), so dass Du nicht mehr wissen musst, wann das Modulsystem welche Module geladen hat. Über die ServiceLoader Architektur kann das Modulsystem die Anforderung in eine saubere Ladereihenfolge umsetzen (bedingt schon über die zwingende Compile-Zeit-Abhängigkeit). Wenn Du die Kopplung extrem lose hast, kannst Du auch Listener auf das Result<Account> setzen und erst dann los arbeiten, wenn Accountdaten gesetzt wurden. Dann kann Dir die Reihenfolge komplett egal sein, und der Fall mit notifyLater und dem
M5 Modul klappt dann auch

Beste Grüße,
Josch.