While em Threads

2 respostas
Schimuneck

Ae galera, estou com um problema em duas threads que estou trabalhando ao mesmo tempo.

Tenho dois while, um em cada Thread. Esta funcionando tudo ok, mas os prints que tenho no loop da primeira Thread eles não vão sendo mostrados conforme a execução, parasse que o sistema acumula eles e mostra somente no final.

Aqui tenho o código da Thread que acorre isso?

package Scripts;

import java.io.IOException;
import java.io.InputStream;

import mainPackage.PD1901View;

public class InputLua extends Thread {
	Process processo;
	ServidorSocket servidor;
	String address;

	InputLua(String address) {
		this.address = address;
	}

	public void run() {
		if (address != null) {

			servidor = new ServidorSocket();
			servidor.start(); //segunda thread

			try {
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				processo = Runtime.getRuntime().exec("./lua " + address);
				InputStream in = processo.getInputStream();
				int c;
				String saída = "";
                                
                                //while em que os prints acontecem mas não são mostrados em tempo real
				while ((c = in.read()) != -1) {
					saída += ((char) c);
					if (c == 13 || c == 10) {
						PD1901View.getTerminal().setTerminal(
								saída.replaceAll("\n", ""));
						System.out.print(saída);
						saída = "";
					}

				}//aqui que os prints aparecem
				servidor.stoped();
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

Alguma ideia do que pode estar ocasionando isso e uma possível solução?
Obrigado

2 Respostas

E

O objeto out bufferiza os dados que recebe para imprimir, e só os imprime quando necessário.

Schimuneck

existe alguma maneira de “forçar” ele a imprimir quando que quiser?

mas não sei se é bem isso, pois a função que chamo junto com o print, ela imprime em um JFrame a mesma string que printo, e ela tbm só mostra no final da execução.

Criado 1 de agosto de 2011
Ultima resposta 1 de ago. de 2011
Respostas 2
Participantes 2