Hola, creo que lo mejor es que hagas un JDialog en vez de un JOptionPane, o crear una clase que herede de JOptionPane.
Para cerrar de forma automática deberías crear un Thread dentro del dialogo y hacer un Thread.sleep(milisegundos) y ahí cerrar...
algo así:
public class MiDialogo extends JDialog{
int segundosDeEspera=10;
public MiDialogo(java.awt.Frame parent, boolean modal, int segundosDeEspera){
//tu codigo para inicializar el dialogo
this.segundosDeEspera= segundosDeEspera;
}
//esto es una clase interna para lanzar el hilo
class hiloEspera extends Thread{
public void run(){
int segundosRestantes= segundosDeEspera;
while(segundosRestantes> 0){
//codigo para mostrar los segundos restantes
Thread.sleep(1000);//esperamos segundo
segundosRestantes--;
}
MiDialogo.this.dispose(); //acceso al dispose de la clase externa
}
}
}
el codigo quizás tiene errores porque no tengo un compilador a mano aca
alog así... cualquier cosa preguntame. no soy muy bueno explicando...