Process + Jtextarea [RESOLVIDO]

7 respostas
G

Boa Noite,
Se já foi aberto algum post com esta duvida peço desculpa, mas tive a procura e não encontrei nada.
Estou com problemas a receber o output do process numa jtextarea, receber recebo mas só no fim do processo eu queria receber a medida que fosse correndo linha por linha

Grato :slight_smile:

7 Respostas

CrOnNoS

Você quer ler linha por linha após o usuário terminar de digitar ?
Ou quer que a cada “Enter” que ele dê a linha seja lida ?

G

estou a fazer um programa para converter de flv para avi, e queria que depois que o usuário carregasse no botão aparecesse todo o output no jtextarea linha por linha

Grato:)

CrOnNoS
Não sei dessa Process, mas se o problema for só ler uma JTextArea linha por linha segue um exemplo:
public class Nada extends JFrame {
	private static final long serialVersionUID = 1L;

	private JTextArea textArea = new JTextArea();

	public Nada() {
		setSize(250, 150);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		add(textArea, BorderLayout.CENTER);

		JButton butao = new JButton("Ler Linha Por Linha");
		add(butao, BorderLayout.SOUTH);

		butao.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String texto = textArea.getText();
				StringTokenizer linhas = new StringTokenizer(texto, "\n");
				while (linhas.hasMoreTokens())
					JOptionPane.showMessageDialog(null, linhas.nextToken());
			} // actionPerformed
		}); // butao ActionListener

		setVisible(true);
	} // construtoe

	public static void main(String[] args) {

		new Nada();

	} // main
} // class
Sendo que a classe StringToknizer separa uma String em "tokens" delimitados pela String que é passada ao construtor (nesse exemplo coloquei o /n que creio que não funciona em qualquer SO) Ela também corresponde a usar o método split da classe String, como muitos eu costumo usar ela mas não sei realmente falar as diferenças importantes. Exemplo com split:
public void actionPerformed(ActionEvent e) {
				String texto = textArea.getText();
				String[] linhas = texto.split("\n");
				for (int i = 0; i < linhas.length; i++) {
					JOptionPane.showMessageDialog(null, linhas[i]);
				} // for
			} // actionPerformed
ViniGodoy

Não é isso. Ele quer ler a saída de um processo e ir jogando num JTextArea. Você deve ler o stream do processo numa thread separada. E, a medida que os dados chegarem, joga-los para o JTextArea.

Infelizmente, não tenho nenhum exemplo aqui. Vou ver se monto um e te mando.

G

muito obrigado Vini ficarei a espera :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Grato

ViniGodoy

Bom. Está aí o exemplo. Deixei a classe que observa o InputStream do processo separada, para que você possa reutilizar no seu projeto.

G

Valeu Vini e isto mesmo

Grato

Criado 19 de novembro de 2009
Ultima resposta 22 de nov. de 2009
Respostas 7
Participantes 3