Falae galera!
Criei uma classe “ProcessInstance” onde eu encapsulei algumas funcionalidades para se trabalhar com Process.
O resultado tá logo abaixo:
[code]public class ProcessInstance {
private Process process;
private PrintStream processInput;
private InputStream processOutput;
private BufferedReader bufferedReader;
private String processName;
public ProcessInstance( String processName, Process process ) {
setProcessName( processName );
setProcess( process );
}
public Process getProcess() {
return process;
}
public void setProcess(Process process) {
this.process = process;
setStreams();
}
protected void setStreams() {
this.processInput = new PrintStream( getProcess().getOutputStream() );
this.processOutput = getProcess().getInputStream();
bufferedReader = new BufferedReader( new InputStreamReader( processOutput ) );
}
public void input( String message ) {
processInput.println( message );
processInput.flush();
}
public void output() {
try {
while(!bufferedReader.ready());
while( true ) {
String line = bufferedReader.readLine(); //TRAVA AQUI
if( line == null ) break;
System.out.println( line );
}
} catch( Exception e ) {
e.printStackTrace();
}
}
public String getProcessName() {
return processName;
}
public void setProcessName(String processName) {
this.processName = processName;
}
}[/code]
Então resolvi fazer um teste q consiste em rodar o CMD.EXE do windows
e emitir um comando DIR no OutputStream e pegar o resultado no
InputStream utilizando a classe acima.
[code]public class Tests {
public void testProcess() {
try {
Process process = Runtime.getRuntime().exec( "C:\\WINNT\\system32\\CMD.EXE" );
ProcessInstance processInstance = new ProcessInstance( "PROCESSO(1)", process );
//envia mensagem
processInstance.input( "dir C:\\" );
//mostra resultado da mensagem
processInstance.output();
} catch( Exception e ) {
e.printStackTrace();
}
}
public static void main( String args[] ) {
Tests test = new Tests();
test.testProcess();
}
}[/code]
Acontece q quando ele tenta mostrar o resultado do comando DIR ele trava no método readLine() de BufferedReader.
O resultado da saída do programa está logo abaixo:
[code]Microsoft Windows 2000 [VersÆo 5.00.2195]
© Copyright 1985-2000 Microsoft Corp.
C:\projetos\test>dir
O volume na unidade C ‚ Disco local
O n£mero de s‚rie do volume ‚ 5006-3678
Pasta de C:\projetos\test
05/07/2005 13:18 <DIR> .
05/07/2005 13:18 <DIR> …
05/07/2005 13:18 <DIR> build
05/07/2005 11:03 3.349 build.xml
05/07/2005 11:03 3.349 build.xml~
05/07/2005 16:58 <DIR> CVS
05/07/2005 10:59 85 manifest.mf
05/07/2005 11:03 <DIR> nbproject
05/07/2005 14:03 <DIR> src
05/07/2005 10:59 639 teste.txt
4 arquivo(s) 7.422 bytes
6 pasta(s) 2.804.244.480 bytes dispon¡veis
[/code]
O processo fica travado no readLine(). Não emite nem uma Exception. Parece q fica procurando por algo.
O q pode ser? Tem alguma coisa errada no q eu fiz?
Valeu!

Ótimo.