Não entendi o que quis dizer com “pára logo após a chamada do método setVisible(), visto que é modal”.
Se eu entendi direito. o programa fica aguardando que alguma coisa aconteça com o JDialog, certo?
Isso ocorre por que, provavelmente, você esteja tentando abrir esse JDialog na mesma thread.
Tente usar SwingUtilities, quem sabe fica mais fácil.
O programa fica aguardando dá 40min (faço a Thread dormir 40min), para fechar a JDialog. Mas o sleep não é executado por que a thread interrompe na execução do método setVisible(true)
public void run() {
GPonto gp = new GPonto(null, true, banco);
gp.setVisible(true);
try {
Thread.sleep(2400000);
} catch (InterruptedException ex) {
Logger.getLogger(GPonto.class.getName()).log(Level.SEVERE, null, ex);
}
gp.dispose();
Assim, o Thread.sleep(2400000); só vai ser executado quando a JDialog for fechada pelo usuário. Entendeu?
Você pode usar a classe Timer (java.util.Timer) para realizar os agendamentos. Os métodos shcedule() e scheduleAtFixedRate() permitem realizar agendamentos de diversas formas (por exemplo: para determinada data/hora, com delay de início e podendo repetir a intervalos específicos). Pode agendar para abrir e fechar a janela, pode ficar mais fácil que usar threads diretamente.