Eu tenho um programa Java que usa reflexão paraencontre e invoque o método principal (String [] args) de outro programa Java. Esse outro programa geralmente é um aplicativo Swing que tende a gerar seus próprios threads. Fiquei me perguntando se havia uma maneira de determinar quando esse outro "programa" termina. Não tenho certeza se existe alguma maneira de detectar isso, pois ele é executado no mesmo espaço que o programa host. O método atual é apenas para verificar se algum dos quadros abertos não é nosso, não é exatamente a melhor solução. A execução do programa filho em seu processo também não é realmente uma opção, uma vez que temos acesso a ele.
EDITAR: Parece que a resposta é uma abordagem dupla. Primeiro, crie um ThreadGroup e inicie o programa filho em um thread que seja membro desse grupo. Verifique se Frame.getFrames () se algum dos quadros pertence ao filho.
Obrigado, --Sandro
Respostas:
1 para resposta № 1Inicie o aplicativo filho em um separado ThreadGroup (provavelmente é melhor configurá-lo como um grupo de encadeamentos daemon) e verifique periodicamente se ele contém encadeamentos ou subgrupos em execução.
0 para resposta № 2
Se você tiver maneiras de descobrir as janelas que este aplicativo filho está usando, basta anexar os ouvintes de janelas apropriados e aguardar todo o evento close.
Editar:
Usar a abordagem do ouvinte de eventos pelo menos permitevocê não deve repetir e consultar constantemente os quadros. Para o caso dos fios gerados, não faço ideia. Se houver uma maneira de rastrear seus próprios threads e descobrir os threads do aplicativo, você poderá fazer o mesmo loop dos Frames.
Editar 2:
O que me vem à cabeça é usar o JMX em si mesmo para obter os threads e outras informações, mas não conheço o JMX em muitos detalhes.