Boa tarde pessoal,
Eu estou, a partir da minha aplicação em Java, abrindo uma planilha no Excel. Isso com o seguinte comando:
Desktop dt = Desktop.getDesktop();
dt.open( new File( file ) );
Aparentemente, este comando passa a responsabilidade da abertura da planilha para o sistema operacional e já pula para a próxima linha de comando. O problema é que eu preciso que o programa só continue a executar após ter certeza que o Excel já foi aberto e a planilha carregada completamente.
Alguém aí tem alguma ideia de como fazer isso?
Também já tentei com o código… Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file);
…e não deu certo.
Obrigado.
A quem interessar possa, aparentemente descobri uma solução:
O Process retornado pelo método exec da classe Runtime possui um método chamado exitValue que retorna 0 caso o comando tenha executado com sucesso e pode lançar uma IllegalThreadStateException caso o processo ainda não estiver concluído. Utilizando este conhecimento, desenvolvi um trecho de código que faz exatamente o que quero:
...
Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file); //$NON-NLS-1$
// Trecho de código criado para garantir que o programa só passe para o próximo comando após a abertura
// completa da planilha
while ( true ) {
try {
// Método exitValue lança IllegalThreadStateException enquanto o processo externo não estiver completado
// e retorna 0 caso o comando tenha executado corretamente
exitValue = p.exitValue();
} catch ( IllegalThreadStateException exception ) {
Thread.sleep( 1000 );
continue;
}
break;
}
...
Espero que isso possa ajudar alguém algum dia.
Abraço.