[RESOLVIDO] Como atualizar tela JDialog antes de fechar

Tenho um problema que deve ser muito bobo, mas não encontro a solução.

Fiz uma tela de login e nela coloquei uma imagem dentro de JLabel, o problema é q após informar o login e senha, eu quero que exiba outra imagem por 1 segundo e feche este JDialog, a tela de login ta blz, a primeira imagem aparece tudo sussa, mas quando informo tudo certo e clica no ok, a imagem não muda mas ele fica 1 segundo parado, depois disso executa o dispose() e fecha a janela, sem fazer o q eu quero.

Alguem sabe uma atualizar o JDialog em tempo de execução ?

                Bora loginAcessoUsuario = new SgiLoginDAO().recupera(cUsuario.getText());

                if (loginAcessoUsuario == null || !loginAcessoUsuario.getcUsuario().equals(cUsuario.getText())) {
                    cAviso.setText("Usuario e/ou Senha Incorreto");
                    cUsuario.requestFocus();
                } else if (!loginAcessoUsuario.getcSenha().equals(new SgiFuncoes().codificaMD5(cSenha.getText()))) {
                    cAviso.setText("Senha Incorreta !!!");
                    cSenha.setText(null);
                    cSenha.requestFocus();
                } else {
                    SgiSession.getInstance().setnUsuarioID(loginAcessoUsuario.getnUsuarioID());
                    SgiSession.getInstance().setcUsuario(loginAcessoUsuario.getcUsuario());
                    SgiSession.getInstance().setnNivel(loginAcessoUsuario.getnNivel());
                    SgiSession.getInstance().setlLogado(true);
                    SgiSession.getInstance().setnEmpresaID(1);

                    // Troca a imagem do login           <---- esta parte nao funciona   ---------->
                    lbCadeado.setIcon(new ImageIcon(getClass().getResource("/img/cadeado_open.png")));
                    lbBarra.setText(loginAcessoUsuario.getcUsuario());
                    cAviso.setText("Aguarde... carregando...");
                    

                    // Espera 1 segundo para continuar
                    try {
                        Thread.sleep(3600);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(SgiLogin.class.getName()).log(Level.SEVERE, null, ex);
                    }

                    dispose();

                }
 lbCadeado.setIcon(new ImageIcon(getClass().getResource("/img/cadeado_open.png")));  

não entendir pq do getClass().getResource();

so bastaria isso:

lbCadeado.setIcon(new ImageIcon("/img/cadeado_open.png"));

a image esta nessa pasta realmente?

diretorioBase/img/cadeado_open.png

A imagem esta na pasta correta e esta pegando correndo, o problema é que não atualiza a tela e aguarda o tempo q determinei.

E simples quando vc seta o icon no JLabel ele depois da ultima linha do metodo ou classe o container chama o metodo repaint(); para repintar a tela so que vc manda ele aguarada um sengundo antes de chegar ao final e logo depois vc chama o metodo dispose();

try {  
        Thread.sleep(3600);  
    } catch (InterruptedException ex) {  
        Logger.getLogger(SgiLogin.class.getName()).log(Level.SEVERE, null, ex);  
    }  
  
    dispose();  

tente chama o repaint(); antes de dispose();

assim:

try {  
        Thread.sleep(3600);  
    } catch (InterruptedException ex) {  
        Logger.getLogger(SgiLogin.class.getName()).log(Level.SEVERE, null, ex);  
    } 
repaint();
dispose();  

beto11, tentei com a sua dica, mas não funcionou eu ja tinha usado o Thread.sleep, ele congela e depois fecha a tela sem mudar a imagem…

Eu acabei resolvendo de outra forma na tela de login tenho um botao de OK

                if (cOpc.equals("ok")) {
                    if (confirma()) {

                        // Desabilita tela e aguarda 1 segundo.
                        btnOpc[0].setEnabled(false);
                        btnOpc[1].setEnabled(false);
                        cUsuario.setEditable(false);
                        cSenha.setEditable(false);

                        pausa = new Timer(1200, new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                pausa.stop();
                                dispose();
                            }
                        });
                        pausa.start();
                    }
                    
                } else {
                    fechar();
                }
            }

no final do dia eu acabei fazendo um teste e vi q n ia funcionar, mas q bom q vc conseguiu resolver.