Detectar quando um programa finaliza

4 respostas
marcos.junqueira

Olá pessoal,

tenho um programa aqui que em algumas vezes raras ele finaliza sozinho, e o erro sempre aponta para uma @$#@%$ de DLL que o cara usou no programa e tirou toda a portabilidade do java.
Eu queria saber se existe alguma coisa para detectar quando esse programa finaliza…

até mais.

4 Respostas

klarq

Comece um processo e coloque um aviso depois de waitFor, se ele acabar a próxima linha de waitFor vai ser executada… 8)

Process p = Runtime.getRuntime().exe("programa.exe"); p.waitFor(); System.out.println("Finalizou");

marcos.junqueira

Blz, isso resolve parcialmente meu problema…

fiz esse código que me passou como uma Thread, porém o programa executado fica lento.
É preciso que seja uma Thread, quero que o prório programa detecte se ele foi finalizado ou não.

alguma sugestão?

até mais…

klarq

Se eu entendi bem, você nãp precisa de uma thread pois p.waitFor() é um thread e só permitirá ir para a próxima linha se o processo terminar.

marcos.junqueira

Não, isso eu sei…

É o seguinte: eu executo o meu programa.exe (é um launcher para o java) ai a classe que contém o método main é executada.
Para eu utilizar o p.waitFor() no meu main, eu precisaria que ele permitisse passar para a próxima linha.

Eu preciso detectar quando o meu próprio programa termina

Olha, eu fiz o seguinte:

public class DetectorFinalizacao extends Thread {
    private String[] args;
    
    public DetectorFinalizacao(String[] args) {
        this.args = args;
        this.setPriority(this.NORM_PRIORITY);
    }
    
    public void run() {
        try {
//            String comando = "java " +
//                    "-Djava.library.path=\"./lib\" " +
//                    "-DEXEPATH=\".\" " +
//                    "-Ddebugger=true " +
//                    "-jar ./dist/TudoMais.jar";
            String comando = System.getProperty("EXEPATH") + "\\TudoMais.exe";
            if(args != null) {
                for (int i = 0; i &lt args.length; i++) {
                    comando += " " + args[i];
                }
            }
            Process p = Runtime.getRuntime().exec(comando);
            int exit = p.waitFor();
            if(exit == 0) {
                System.out.println("Finalizou corretamente!");
            } else if(exit == 1){
                System.out.println("Finalizou com erro.");
                Reparador.main(args);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        super.run();
    }
    public static void main(String[] args) {
        DetectorFinalizacao detect = new DetectorFinalizacao(args);
        detect.start();
    }
    
}

Ao executar o TudoMais.exe ele pega no jar o arquivo softPhonePlugin que é programa…

Criado 19 de dezembro de 2006
Ultima resposta 19 de dez. de 2006
Respostas 4
Participantes 2