Boa tarde a todos!
Sou novo na comunidade e esse é meu primeiro tópico (ainda que já tenha lido muito por aqui). Estou com uma dificuldade aparentemente simples, mas há dias estou tentando uma solução para o caso sem êxito.
Enfim, sou responsável por manter um Sistema Desktop feito com Java Swing. A aplicação é bastante complexa no que diz respeito aos seus componentes, threads, etc.
Meu problema é o seguinte: a aplicação rodando em Linux, com uma janela ativa… sigo alguns passos e inicio um processamento relativamente longo (alguns bons minutos). Vamos considerar que esse processamento ocorre em etapas, 10 sub-processamentos por exemplo. Vale compreender que a aplicação só ficará acessível novamente após o processamento acabar por completo. A cada sub-processamento um JDialog (modal) é executado e tornado visível (setVisible(true)), e fechado ao seu término. Daí vem mais um sub-processamento e segue o mesmo ciclo. Ok!
Problema: enquanto todo esse processamento ocorre eu deixo a aplicação em segundo plano (background), e vou responder a um e-mail por exemplo. Acontece que a cada vez que um sub-processamento é iniciado, a instrução setVisible(true) do meu diálogo “rouba” o foco do Sistema Operacional e manda a aplicação para o primeiro plano. Clico novamente no Navegador, começo a escrever e mais uma vez a aplicação é colocada em primeiro plano quando iniciado um novo diálogo de progressão. Moral dá história. Não consigo fazer mais nada no computador durante o processamento.
Abordagem que estou pretendendo seguir: queria saber em tempo de execução, como verificar que minha aplicação está rodando em segundo plano. Pesquisei muito e não encontrei um método que me fale que a aplicação está ou não em segundo plano, em um determinado momento. Porque se eu conseguir saber isso, tenho como colocar uma condição para a execução do setVisible(true) do meu diálogo de progressão, de forma a só tornar o diálogo visível se a execução estiver em primeiro plano. Dessa forma creio que consiga resolver meu problema.
Desculpe se tiver sido muito detalhista na minha descrição do problema. A intenção foi a de ser bem claro para conseguir algum auxílio.
Grato pela oportunidade!