Pessoal estou rodando uma instrução atraves da classe Runtime no linux. Ja usei a ProcessBuilder tambem, mas o erro é o mesmo.
Acontece que ela interrompe o processo do nada, nao da exception nao faz nada é como se alguem desse um kill nesse processo.
O codigo que eu uso é simples de tudo
ProcessBuilderpb=newProcessBuilder("comando que eu executo");try{Scannerscanner=newScanner(pb.start().getInputStream());// aqui a aplicacao para, porem ela executa por um determinado tempo normal, depois para derrepentewhile(scanner.hasNext()){System.out.println(scanner.nextLine());}// o codigo nunca chega aqui}catch(Exceptione){e.printStackTrace();// nem aqui}// nem aqui
O problema eh que, provavelmente o processo que roda o seu programa esta tentando escrever para stdout ou stderr.
Isso causa o seu programa “travar”.
A solucao mais simples eh usar o metodo redirectErrorStream do ProcessBuilder. Isso eh “setado” falso por default, mas se vc colocar “true” significar que output e error vao utilizar a mesma stream.
Tenta adicionar isso no seu codigo e veja se funciona.
Ai vai o seu codigo modificado:
ProcessBuilderpb=newProcessBuilder("comando que eu executo");pb.redirectErrorStream(true);// adiciona isso no seu codigo.try{Scannerscanner=newScanner(pb.start().getInputStream());while(scanner.hasNext()){System.out.println(scanner.nextLine());}}catch(Exceptione){e.printStackTrace();}
//Daniel
mauricioadl
Entendi, vou testar aqui e mais tarde falo o resultado.
Obrigado!
mauricioadl
Fiz o teste aqui e o problema continua.
O processo que tento rodar é o sql plus. São sempre 3 arquivos .sql.
O primeiro passa normal e o segundo começa a passar e para no meio do caminho, sem exception, sem mensagem, sem nada.
Outra sugestão?
mauricioadl
so pra constar no autos rsss
A instrução funciona perfeitamente no windows.
W
windsofhell
Ooook. Entao funciona no windows mas trava no linux. =/
Estranho… =/
Infelizmente agora eu nao tenho nenhuma maquina linux para testar, mas quando eu chegar em casa eu tento fazer uns testes.
//Daniel
W
windsofhell
Soh pra testar tentar rodar a parte que vc le a stream em outra thread.
//Daniel
mauricioadl
Cara consegui resolver.
So risadas, tinha um maldito de um processo no servidor linux com um comando killall java que matava minha aplicaçao exatamente no momento que rodava o comando no runtime, foi tenso! hauhauhau