Java Swing - verificar execução em background

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!

Threads resolvem.
Edit: Opção 1 e opção 2

Então ja tive um problema parecido e eu resolvi de forma simples e prática, você ja tentou por ele minimizado e ir fazer suas coisas ? Bom comigo funcionou.

Já tentei deixar ele minimizado mas não adiantou. A cada novo sub-processamento a aplicação vem para o primeiro plano e o diálogo de progressão é exibido. De qualquer forma eu agradeço a dica.

E tentou estudar e aplicar threads?

Rss… era o que eu temia Luis. Em primeiro lugar agradeço a você também. A situação é que já tenho Threads, Observer, SwingWorker, em demasia envolvidos. Também acreditei que a correta utilização de Threads resolveria meu problema, mas já tentei seguir esse caminho e não resolvi o problema. Bem provavelmente pela complexidade do contexto da aplicação citada, e também por falta de experiência com problemas dessa natureza. A minha esperança mesmo é conseguir algo como if (!estouEmSegundoPlano) { setVisible(true) }.

Já estudei um bocado de coisa pra tentar resolver isso. Inclusive Threads. O fato que já tenho uma Thread que fica verificando a condição para notificar o objeto que ele deve ficar visível… era inclusive nessa Thread que eu queria adicionar o teste de execução em segundo plano…