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:
[code]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();
}
}[/code]
Então, estou trabalhando com ela dessa forma:
[code] …
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() );
…
[/code]
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!