[RESOLVIDO]Colocando um tempo determinado para o JFrame ficar aberto

Prezados, Boa noite.

Mais uma vez estou aqui para com a ajuda de vocês aprender mais uma.
Estou com o meu pequeno programa de auxilio ao usuário. Criei um sistema onde alguns dos problemas mais frequentes gerados no sistema possam ser corrigidos por eles mesmo.
Criei um Jframe principal onde está os icones que chamam outros Jframe , cada um com sua função.
Pois bem, como será para uso de usuários, gostaria de deixar um tempo determinado para cada JFrame ou seja, quero colocar um tempo para a aplicação encerrar se o usuário não utilizar, pois deixarei ele num local de rede acessível para todos, então para que não aconteça de um usuário tentar usar o sistema e o arquivo esteja aberto por outro usuário.
Enfim, eu havia criada em cada Jframe o evento Form Windows Opened, e criei uma Thread, e coloquei o comando thread.sleep(20000) em seguide coloquei o this.dispose();
Quero apenas que fique aberto por 20 segundos e depois feche, se não for usado.
Porém colocando dessa forma o programa trava e não consigo fazer nada. Li em alguns tópicos anteriores sobre a Thread do Jframe entrar em conflito com outra Thread chamada no mesmo lugar. Mas não consegui assimilar um resolução, Eu Deveria criar uma classe separada, e criar um metodo com a Thread.sleep() e chamar no evento Windows Opened? para que o Jframe ao abrir já comece a contar os 20 segundos, mas ficarei disponivel para clicar em todos os outros icones?

Seria bom criar uma classe separada.

Fazer isso é um pouco complicado. Na thread:

class ControleDeAtividade extends Thread {
    long atividade;
    JFrame frame;
    void run() {
        atualizarAtividade();
        do {
            Thread.sleep(1000); // 1s
        } while(currentTime() - atividade < 20000);
        frame.dispose();
    }
    void atualizarAtividade() {
        atividade = currentTime();
    }
}

Quando a janela entrar em atividade, terá que chamar o método atualizarAtividade na classe ControleDeAtividade.

Uma sugestão mais simples seria deixar 30 minutos ou uma hora e encerrar a janela mesmo que ainda esteja ativa. Outra sugestão seria colocar isso no lado do servidor, pois alterar a hora e dia do sistema irá interferir no tempo da aplicação.

Prezado diego12 , nesse caso eu chamo o metódo no Form window Open?
tentei fazer dessa forma e continou travando. Não conseguir colocar esse currentTime não aparece para mim, apenas currentThread.
Eu só preciso mesmo que a tela seja exibida durante 20 segundos no maximo é uma tela principal dos programas.

O método completo:

long currentTime() {
    return java.lang.System.currentTimeMillis();
}

No método open:

controleDeAtividade = new ControleDeAtividade();
controleDeAtividade.start();

Depois em cada ação do usuário:

controleDeAtividade.atualizarAtividade();

Diego12, o controleDeAtividade.start(), ele na verdade é o void run() correto?
outra dúvida, no caso o controleDeAtividade.atualizarAtividade(); eu teria que colocar no próprio form, pois o intuito não é o usuário executar uma ação para ele contar o tempo, mas que ele ao abrir o Jframe já inicie sabendo o tempo que vai ficar aberto. tentei de várias formas mas ainda não consegui fazer funcionar.

Não, é o start e não o run, o start inicia a thread e o run é só um método do thread.

Consegui resolver o problema criando uma Thread, na qual eu chamava após executar o metódo setvisible(true) no Jframe.