Abrir automaticamente JDialog em horários determinados

O problema é o seguinte:

Tenho a minha aplicação rodando (JFrame) e preciso fazer com que uma janela JDialog abra em determinado horários do dia.

Alguém me ajuda a resolver esse problema. Tentei usar Thread mas pára logo após a chamada do método setVisible(), visto que é modal.

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.

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html

Você pode também usar a classe javax.swing.Timer, para agendar a execução de um ActionListener após um delay em milisegundos:

http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/Timer.html

Nos links abaixo alguns exemplos:

http://books.google.com.br/books?id=hkJie0CyNb0C&pg=PA386&lpg=PA386&dq=java.util.timer&source=bl&ots=wxWYjAgEx1&sig=WjJAxXOwZZKw7_AolpwusOPTHEM&hl=pt-BR&sa=X&ei=vCX_T9KrC4eu8ATvqanpBg&ved=0CDYQ6AEwAA#v=onepage&q=java.util.timer&f=false

http://books.google.com.br/books?id=fu5HtixRje8C&pg=PA353&lpg=PA353&dq=java.util.timer&source=bl&ots=nIQD1r1spz&sig=m0-6YjFsjHxZwwzS35hjqxWMlow&hl=pt-BR&sa=X&ei=Cif_T8PPLIqK8QTcwe3YBg&ved=0CFYQ6AEwBQ#v=onepage&q=java.util.timer&f=false

Valew pelas dicas galera.

Resolvi com Timer e SwingUtilities.