Runtime exec, várias execuções

5 respostas
S

E ae pessoal,

Bom, estou tentando executar vários comandos seguidos, mas por algum motivo ele só executa o primeiro.
Ele mostra o resultado que imprime do primeiro e para nele.
Se alguém tiver alguma luz diz ae
Segue o código:

Iterator inte = lista_tudo.iterator(); while(inte.hasNext()) { String nome = (String) inte.next(); String[] tmp = nome.toString().split("\\."); if(tmp[tmp.length-1].equals("sql")) { Process p = Runtime.getRuntime().exec("sqlplus \"user_instalador/instalador@sgc1\" \"@"+ nome +"\""); System.out.println("sqlplus \"user_instalador/instalador@sgc1\" \"@"+ nome +"\""); BufferedReader input =new BufferedReader (new InputStreamReader(p.getInputStream())); String line; int i=0; while ((line = input.readLine()) != null) { if(i>9 && !line.equals("")) jTextArea1.setText(jTextArea1.getText() + line + "\n"); i++; } input.close(); } }

Valeu! Abraços

5 Respostas

R

Olah,

Superxis, a melhor saída para esses problemas é uma boa debbugada…

verifique o tamanho de inte, com um metodo size ou length, não lembro agora.

veja se é maior que 1, se sim, debbuge linha a linha, é a melhor saída, você aprende e resolve o problema.

[]'s

L

Ele soh mostra o primeiro porque fica travado no

line = input.readLine()

Como se ficasse aguardando mais stream do processo, entao ele nem chega a executar duas vezes.

Tenta assim:

InputStream input = p.getInputStream();
				Scanner s = new Scanner(input);
				while (s.hasNextLine()) {
					String line = s.nextLine();
					System.out.println(line);
				}
				input.close();
S

Olá pessoal :grin:

Rodrigo, quando é Iterator nao tem a opção de ver o tamanho, mas ele tá entrando sim por que ele tá imprimindo todos se eu retirar a parte do código que recebe o retorno, vai normal como deveria.

Agora, luBS, eu usei seu código mas ele deu na mesma com o que eu tenho, infelizmente.

Daí eu fiz o seguinte, coloquei cada chamada do Runtime.getRuntime().exec em uma Thread, como já era de se esperar ele criou incessantemente várias até travar o computador, não dá assim tbm hehhehe

Acho que a solução neste caso seria eu descobrir quando a Thread pára (pq acho que ela não acaba, só pára). Então tentei usar o interrupted() ou o isAlive(), mas como ela está ociosa ou parada também não deu certo :!: :!: :!:

Minhas sugestões :idea: acabaram hehehe
Alguém chuta mais alguma coisa?

Valeu galera! Abraços :roll:

L

É verdade, viajei :oops: é que eu tinha testado com um outro comando do SO que funcionava :grin:

então, vou ver se acho mais alguma coisa, mas a principio acho que vc esta com problemas hehe da uma lida
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Process.html

S

luBS, desisti lendo isso 8O :

Pelo jeito vou ter que deixar de lado, e outra, pode ser que tenha limite de buffer, já tem outro problema uahuehuha

Valeu a ajuda luBS, abraço!

Criado 31 de agosto de 2007
Ultima resposta 3 de set. de 2007
Respostas 5
Participantes 3