Executando tarefas em um Process aberto

0 respostas
Luiz_Henrique_Coura

Ae galera!

Criei uma instancia de Process q está executando um prompt do windows (CMD.exe) e envio os comandos q quero q ele execute pra mim através de OutputStream de Process. A intenção é deixar aberto esse processo e receber os comandos para que sejam executados. Assim eu não preciso criar vários Process de CMD. Naverdade estou fazendo um teste, não é exatamente o CMD q vou utilizar, e sim, um programa da empresa, portando isso é só um exemplo.

Criei essa classe:

public class SystemInstance {
    private Process process;
    private PrintStream input;
    private InputStream output;
    
    public SystemInstance( Process process ) {
        this.process = process;
        this.input = new PrintStream( process.getOutputStream() );
        this.output = process.getInputStream();
    }
    
    //executa a message
    public void systemInput( String message ) {
        input.println( message );
        input.flush();
    }
    
    //pega o resultado da message executada
    public String systemOutput() {
        try {
            byte[] buffer = new byte[output.available()];
            int out = output.read( buffer );
            return new String( buffer );
        } catch( Exception e ) {
            e.printStackTrace();
            return null;
        }
    }
    
    public void destroy() {
        this.process.destroy();
    }
}

Então, estou trabalhando com ela dessa forma:

...

    Process p = Runtime.getRuntime().exec( "CMD.exe" );
    SystemInstance si = new SystemInstance( p );

...

    //Neste trecho do programa ele recebe a message que será executada e repassa ao processo CMD q está livre para ser executado
    System.out.println( "PERFORM: " + message  ); 
        
    //executa a message
    si.systemInput( message );

    //mostra o resultado da message executada
    System.out.println( si.systemOutput() );

...

Acontece q qd envio a primeira mensagem, a segunda, a terceira, ele executa normal e do nada ele para de executar as outras mensagens q envio, o processo continua aberto, mas ele não executa mais nada. As vezes ele para de executar dependendo da mensagem q executo, por exemplo se envio a mensagem "dir/s" a próximas mensagem não são mais executadas.

Parece q o flush de PrintStream não está executando, ou se está executando, de alguma forma o CMD não está entendendo a mensagem e não reconhece o comando.

Enfim, o q pode estar acontecendo?

Valew!

Criado 22 de abril de 2005
Respostas 0
Participantes 1