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

7 respostas Resolvido
SergioLucas

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.

7 Respostas

SergioLucas

OK. Alguém?

rodriguesabner

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

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

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

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).

SergioLucas

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.

staroski

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

SergioLucas

Perdão, bem observado staroski.

Criado 27 de fevereiro de 2018
Ultima resposta 28 de fev. de 2018
Respostas 7
Participantes 3