Bloquear o programa e deixa-lo não visível em java SE por inatividade ou por logar usando mesmo login em outra maquina

Eu estou criando um programa em java que tem por finalidade ser gerencial e nele é feito login usando banco de dados com modelo cliente/servidor e eu quero que toda vez que a pessoa ficar inativa por um determinado tempo ou tenha usado seu usuário para conectar em outra máquina, que eu possa apenas deixar o programa inacessível e invisível para o usuário até ele fazer seu login novamente. Eu fiz uma solução que deu certo parcialmente, eu consigo usando Thread e o endereço MAC verificar se foi utilizado o login em outro computador, consigo fazer com que o usuário não consiga utilizar o programa, pois deixo o meu JFrame principal como parâmetro da Thread e torno ele inacessível e invisível até ser feito o login, mas se tiver algum JDialog aberto, ele apenas fica inacessível, mas ele fica visível, sendo que qualquer pessoa conseguiria ver dados importantes que tivessem abertos antes. Quero saber se a única solução é ir passando como parâmetro dos os JDialogs, relatórios e outros para a Thread ou se tem como deixar apenas o JDialog do login visível até o usuário fazer o login e poder continuar de onde parou?
Desde já agradeço.

Não pode, a partir da thread, invocar o System.exit(0); e encerrar o programa?

Sim, encerrar o programa eu posso, é também o jeito mais rápido e fácil, mas como já trabalhei com alguns programas que depois que a pessoa faz novamente o login ela pode continuar de onde parou eu queria saber se tem alguma forma de fazer isso ocultando tudo que tivesse aberto, para depois tornar visível de novo. A única solução que pensei é muito trabalhosa e acabaria atrapalhando conciliar meu método de inatividade com o de verificar login único.

Cara, até onde me lembro, você pode fazer sim.
Só que, precisará manter um registro de todas as telas que for abrindo (JFrame ou JDialog).
A partir daí, após o período X de tempo de inatividade ou login em outra máquina, vai setando como dispose ou como visible false.

essa também foi a forma que pensei, mas ela acaba gastando muito mais recurso do computador porque existem JDialogs meus que abrem vários outros e tem que fazer o controle em todos os JDialogs “filhos”. Por isso queria saber se através do JFrame “Pai” que é o principal tinha algum método que acessasse os “filhos”.