Consegui rodar o comando lspci com Java, mas na hora de ler a saida do comando com o método readLine() só mostra a primeira linha, conforme a imagem abaixo:
Com o método readLine() não deu não, nem colocando um laço. Creio que o método readLine() não seja o indicado para este procedimento de ler saida de comandos no Linux.
Ainda tô procurando alguma classe que possua um método que sirva neste link: http://java.sun.com/javase/6/docs/api/
Mas ainda não achei…
Guevara
Testei com o OutputStream() da classe Process e tb não deu certo.
Alguma idéia?
[]s
kaique
A minha sugestão é você chamar o método waitFor() da classe Process antes de ler o OutputStream. Assim você terá certeza que a execução do comando terminou e tudo que ele deveria escrever no buffer foi escrito.
[]'s.
M
molmedo
Já resolveu? Se não, tenta dessa maneira:
InputStream in = null;
Process proc= Runtime.getRuntime().exec("comando");
in = proc.getInputStream();
int c;
while ((c = in.read()) != -1) {
outputTextArea.setText(String.valueOf((char) c));
}
Guevara
Olá pessoal!
Ao colocar o waitFor() da dica do Kaique mostra somente a primeira linha e ao colocar o while da dica do Molmedo a aplicação trava e não responde. Cheguei até a copiar o código pra ver se era problema da IDE e mesmo assim não deu.
Cara, muito esquisito esse seu problema. Já verificou se a resposta do comando realmente retorna mais de uma linha?
O que o método waitFor() irá fazer é “segurar” a execução do seu programa enquanto o processo que foi iniciado não terminar.
Faça o seguinte, utilize o trecho de código abaixo:
Funciona da seguinte maneira: execute a classe e, no prompt de comando, escreva o comando que deseja ser executado e tecle enter. Assim que terminar a execução do processo, o resultado será impresso na tela, tal como se você utilizasse o próprio prompt de comando para executar o pocesso.
Depois de fazer isso, nos avise se deu certo…
[EDIT]
O seu código está certo com a utilização do waitFor(). O problema é que você lê somente a primeira linha do inputStream. Tente ler todo o conteúdo existente que provavelmente irá funcionar.
Só agora percebi isso quando fui ler o seu código…
[/EDIT]
Não entendo o motivo do BufferedReader ou o readLine() não mostrar a saída do comando como foi feito usando a classe Scanner.
Esta linha transforma o texto em byte?
byte[]content=newbyte[inputStream.available()];
Abraço!
kaique
Simples, quando você chama o método readLine(), ele vai te retornar somente uma linha do buffer que se encontra na isntância da classe BufferedReader. Lembre-se que quando você vai instanciar essa classe, você passa um InputStream no construtor, que simplesmente são todos os bytes gerados pelo processo que você executou.
Não. Essa linha cria um array de bytes com o tamanho exato do conteúdo gerado pelo processo que você executou. Na realiade, o que você faz é o contrário: transforma os bytes em texto. É o que eu faço na linha que mando imprimir na tela. Dá uma olhada no código.
[]'s.
Guevara
Tô de volta pra informar que consegui resolver o problema com a ajuda do TBispo. :lol: