Dispose JWindow após Timer

Caros,

Tenho uma aplicação que após um determinado evento chama uma JWindow. Essa Jwindow deveria ficar aberta por 4 segundos e fechar e seguida. Para isso utilizei a classe javax.swing.Timer, e após os 4 segundos eu chamo o método dispose() referenciando a minha JWindow. Porém, a mesma não fecha (só é possível fecha-la finalizando toda aplicação). Peço, por gentileza a ajuda de vcs. Abaixo, os trechos dos códigos em questão:

Classe que chama a JWindow (popup()):

if(cont == 0){
	String DATA = "SELECT getDate() as data";
	resultado = MeuState.executeQuery(DATA);
	resultado.next();
	Time hora = resultado.getTime("data");
	String SQL1 = "INSERT INTO TESTE_TB002_LANCAMENTO(fk_tb001_usuario, data, tipo, origem, data_atualizacao, nivel) values('"+id+"',getDate(),"+0+","+0+",getDate(),'"+nivel+"')";
	 MeuState.executeUpdate(SQL1);
	 //Abrir JWindow confirmando a operação e mostrando os ultimos registros do dia do funcionário em questão
	 final popup pop = new popup();
					    
	Timer timer = new Timer(4 * 1000, new ActionListener(){  
	   public void actionPerformed(ActionEvent ev) {  
	         pop.dispose();
	         pop.setVisible(false);
	         pop.removeAll();
		 System.out.println("dispose");  
          }  
	});  
	timer.setRepeats(false);  
	timer.start();  
	pop.show();  
	timer.stop();
}

Classe popup()


public class popup extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Connection dbConnection;
	JLabel titulo, data, nome;
	JTextField horario1,horario2,horario3,horario4;
    
    
	
	public popup(){
		final JWindow window = new JWindow();
		horario1 = new JTextField();
        horario1.setBounds(80, 120, 100, 20);
        
        horario2 = new JTextField();
        horario2.setBounds(80, 135, 100, 20);
        
        horario3 = new JTextField();
 	    horario3.setBounds(80, 150, 100, 20);
 	    
 	    horario4 = new JTextField();
        horario4.setBounds(880, 100, 100, 20);
 	   
 	   
	    
		ResultSet resultado;
		Statement MeuState ;
		
		try {
			Class.forName("net.sourceforge.jtds.jdbc.Driver");
            dbConnection = DriverManager.getConnection( "jdbc:jtds:sqlserver://localhost:1433;DatabaseName=PONTO", "Rafa", "jones1");

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e){
			e.printStackTrace();
		}
		
		
		try {
			MeuState = dbConnection.createStatement();
			
			String SQL1 = "Select * from teste_tb001_usuario where pk_tb001_usuario = '7'";
			resultado = MeuState.executeQuery(SQL1);
			resultado.next();
			String nome_func = resultado.getString("nome");
			
//			 Faz um select full na tabela de funcionários
			String SQL = "Select top 4 * from TESTE_TB002_LANCAMENTO where fk_tb001_usuario = 7 and data >= 30/02/2009";
			resultado = MeuState.executeQuery(SQL);
		
		int linha = 0;
		while (resultado.next()){
			  linha = linha + 1;
			  Time horario = resultado.getTime("data");


			 if(linha == 1){
			   horario1.setText(horario.toString());
			 }

			 if(linha == 2){
			   horario2.setText(horario.toString());
			 }

			 if(linha == 3){
			   horario3.setText(horario.toString());
			 }
			 
			 if(linha == 4){
			   horario4.setText(horario.toString());
			 }
			 
			}
		
	 // Adiciona componentes na janela
		titulo = new JLabel("Registros de Hoje");
		titulo.setBounds(20, 30, 200, 25);
		nome = new JLabel(nome_func);
		nome.setBounds(50, 50, 200, 25);
		data = new JLabel("Data: 11/02/2009");
		data.setBounds(50, 60, 200, 25);
	    getContentPane().setLayout(null);
	    window.getContentPane().add(titulo);
	    window.getContentPane().add(nome);
	    window.getContentPane().add(data);
	    window.getContentPane().add(horario1);
	    window.getContentPane().add(horario2);
	    window.getContentPane().add(horario3);
	    window.getContentPane().add(horario4);
	    
	    // Set initial size
	    window.setSize(400, 200);
	    window.setVisible(true);
		   
		}
		catch (SQLException e){
			e.printStackTrace();
		}
	    
}

}

Desde já, agradeço!

Sugiro que coloque o a parte que chama o Timer no construtor da sua janela. E use setVisible(true) no lugar de show() que está deprecated.

Então, eu coloquei. Mas não surti efeito. Tipo, é como se o Timer não disparasse…