Runtime.getRuntime().exec(""); quando for fechado

4 respostas Resolvido
V

Depois de usar Runtime.getRuntime().exec("cmd /c "+arquivo); para abrir um arquivo
Como fazer pra reconhecer que ele foi fechado?
Por exemplo:

Enquanto o .exe estiver aberto não faça nada e depois que ele for fechado escrever:

System.out.println("O programa foi fechado")

Me ajudem, pq não faço a mínima ideia se existe algo que faça isso

4 Respostas

peczenyj

O exec retorna um objeto (acho que do tipo Process) que pode ter alguma indicação, direta ou não, do processo estar rodando ou ativo. Nesse caso vc pode criar uma thread onde vc verifica isso a cada segundo em um loop com sleep. Não custa tentar, olha o javadoc dessas coisas

V

Não entendi mto bem
Tipo, eu entendi oq eu tenho que fazer
Mas não tenho a mínima noção de como fazer

peczenyj
Solucao aceita

primeiro, vc quer usar o metodo waitFor

https://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#waitFor()

porem

java.lang

Class Process

Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, and even deadlock.

Fail to clear the buffer of input stream (which pipes to the output stream of subprocess) from Process may lead to a subprocess blocking.

ou seja

Process process = Runtime.getRuntime().exec("comando");
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((reader.readLine()) != null) {}
process.waitFor();
System.out.println("ACABOU");

bonus: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

V

Muito obrigado mano
D vdd s2

Criado 2 de novembro de 2016
Ultima resposta 3 de nov. de 2016
Respostas 4
Participantes 2