Estou executando um comando externo com o CMD a partir do meu programa com interface gráfica… Só que eu quero criar um terminal dentro do jFrame que me mostre o que está sendo imprimido no terminal…
Consigo fazer isso sem interface gráfica usando o System.out.println()…
E com o jFrame, qual a melhor forma de fazer isso???
Pensei até em imprimir o resultado dentro de uma jTextArea, mas com .setText() fica meio complicado, já que eu teria que ficar pegando o valor da jTextArea, adicionando mais uma linha e setando-o novamente… Isso daria uma string muito grande e precisaria de um tempo muito rápido de resposta… Sem falar que a tela deve até ficar piscando…
Com o System.out.println() seria ideal, já que ira só acrescentando uma linha abaixo…
Exibir resultado de um terminal em um jFrame em Real-time
4 Respostas
Para vocês entederem melhor, veja o código que imprime o retorno do terminal na tela...
package terminal;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
class PromptDeComando extends Thread {
InputStream inStream;
String tipo;
public PromptDeComando(InputStream inStream, String tipo) {
this.inStream = inStream;
this.tipo = tipo;
}
@Override
public void run() {
try {
InputStreamReader inStreamReader = new InputStreamReader(inStream);
BufferedReader buff = new BufferedReader(inStreamReader);
String linha = null;
while ((linha = buff.readLine()) != null) {
System.out.println(tipo + "> " + linha);
}
} catch (IOException ioe) {
}
}
}
public class Terminal {
public static void main(String[] args) {
try {
String comando = "cmd.exe /C ping -n 15 www.google.com.br";
Runtime rt = Runtime.getRuntime();
Process processo = rt.exec(comando);
PromptDeComando erro = new PromptDeComando(processo.getErrorStream(), "ERRO");
PromptDeComando saida = new PromptDeComando(processo.getInputStream(), "SAIDA");
erro.start();
saida.start();
int valorSaida = processo.waitFor();
System.out.println("Valor de saída: " + valorSaida);
} catch (Throwable t) {
}
}
}
Só que eu quero esses resultados retornando numa jTextArea (ou algum elemento gráfico)...
Como eu poderia fazer isso???
Acredito que aqui você encontra sua solução.
Não é isso…
Cria o processo de execução do processo numa thread que atualiza uma StringBuffer (que possui o recurso de sincronização).
Pode utilizar outra thread para atualizar o JTextArea pegando o valor desta StringBuffer, ou trabalhar com binding.
Criado 22 de setembro de 2011
Ultima resposta 23 de set. de 2011
Respostas 4
Participantes 2