setVisible(false);

nasconde semplicemente la finestra, per chiuderla bisogna invocare dispose()...
Si è vero! Scusa l'imprecisione