[RESOLVIDO] Dúvida Thread x Swing - Jframe Travando

Prezados, mais uma vez estou aqui para retirar uma dúvida.
Estou tendo problemas no Jframe, pois estava querendo chamar uma Thread.sleep para contar um tempo e depois fazer um this.dispose(); porém durante esse tempo o Jframe fica travado não consigo clicar nos buttons, pois o intuito é fazer o Jframe ficar ativo por 20 Segundos para a aplicação não ficar aberta sem uso. o Menu principal tem icones que fazem alguns procedimentos. Quero colocar esse tempo pois várias pessoas vão usar esse aplicativo, e alguém pode esquecer aberto e outro não conseguir utilizar.
Passei a tarde toda tentando resolver, e vi os comentários informando que a Thread criada pelo Swing - Jframe é que causa esse transtorno. Seria esse evento abaixo?

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TelaPrincipal().setVisible(true);
        }
    });
    
}

Isso significa que todo Jframe está executando essa Thread. Nesse caso eu teria que criar outra Thread para poder utilizar um metodo para ao iniciar o componente ele usar o thread.sleep e depois encerrá-lo?

ou seja:

new Thread (new Runnable(){

        public void run(){
            
            Thread.sleep(20000);
            Jframe jf = new Jframe();
            jf.dispose();
            
        }
    }).start();

Onde estou errando pois mesmo fazendo assim ele trava e não encerra o Jframe.
Só está faltando isso para encerra meu projeto… são 10 Telas.
e todas elas eu desejo colocar um tempo de execução de cada uma.

Realmente não estou conseguindo assimilar isso. Já tentei ver swingworker, mas também ainda não entendi como implementar.

OK. Alguém?

Voce realmente precisa fechar essa tela? Da muito mais trabalho ter que ficar abrindo a tela pós inatividade…

meuJFrame.setVisible(true);
Thread fechador =  new Thread (new Runnable(){

        public void run() {
            Thread.sleep(20000);
            meuJFrame.setVisible(false);
        }
};
fechador.start();
2 curtidas

Staroski, Muito Obrigado!
era isso mesmo que estava precisando. Na verdade eu já havia colocado um metódo parecido,
não estava colocando no local certo ou seja, logo após o comando .setVisible(true).

Sim, esse é o objetivo, mesmo eu colocando o dispose(), depois que tenho abrir novamente a tela eu apenas chamo o setvisible(true), pelo menos no meu código está abrindo normalmente.

1 curtida

Só uma dica: setVisible é um método, não um comando.

Perdão, bem observado staroski.