Con setVisible() rendi semplicemente la finestra non visibile, ma resta comuqnue, il metodo corretto dovrebbe essere dispose().
Per ottenere l'effetto che vuoi tu, se il JDialog non ha pulsanti, è sufficiente registrare un WindowListener che gestisce l'evento di chiusura della finestra prodotto quando il JDialog è chiuso. Ma il JDialog possiede già incorporata la funzionalità che vuoi ottenere: per "congelare" la finestra sottostante ti serve un JDialog "modale" che puoi costruire col seguente costruttore:
public JDialog(Frame owner,
String title,
boolean modal)
throws HeadlessException
se modal = true ottieni una fienstra modale, cioè che blocca la finestra owner finche non viene chiusa.
![]()