Não consigo atualizar o layout por um processo que esta dentro de uma thead

3 respostas
java
T

Boa noite pessoal. Estou com um problema na minha aplicação onde ela não atualiza os valores no layout no momento que eu mudo os valores delas.

Bem eu tenho uma variavel static ArrayList de JFormattedTextField que eu atualizo toda vez que eu mudo o valor de uma string que esta dentro do model. Ou seja, cada vez que eu chamo o metodo que atualiza esse valor dentro desse model, ele apenas muda os valores no layout quando o processo dentro da model acaba. Eu uso o comando Thread.sleep(1000) dentro dessa model para eu conseguir ver os valores do layout mudando, mas os valores no layout não estão mudando.

3 Respostas

Lucas_Camara

Posta o código pra gente dá uma olhada, por favor. Só com o texto está meio difícil entender esse seu problema.

T

Eu tenho esse metodo que é chamado pelo metodo sobrecarregado RUN da classe Runnable. A função setFitaView atualiza os campos do layout, mas quando eu coloco um JOptionPane para imprimir qualquer coisa antes do Thread.slepp, ele atualiza os campos do layout.

public void executarAnaliseEmFita() throws InterruptedException {
	boolean fimDePrograma = true;
	System.out.println(matrizAcoes.toString());
	
	String novoSimboloString = "";
	String auxilixarString = "";
	String direcaoString = "";
	int posicaoAtualFita = 0;
	String historico = ""; // (estado lido, simbolo lido) -> (estado destino, simbolo gravado, direcao)
	
	for (Component  i :frame.getComponents()) {
		i.repaint();
	}
	
	CelulaObject acao = new CelulaObject();
	
	while (!acao.isFimPrograma()) {
		acao = matrizAcoes.getAcao(String.valueOf(fita.charAt(0)), estadoAtual);
		
		estadoAtual = acao.getEstadoDestino();
		novoSimboloString = acao.getSimbolo();
		direcaoString = acao.getDirecao();
		
		System.out.println("inicial: " + fita);
		System.out.println("estado atual: " + estadoAtual);
		System.out.println("novo simbolo: " + novoSimboloString);
		System.out.println("direcao: " + direcaoString);
		System.out.println("cabecote: " + posicaoAtualFita);
		
		int auxiliarPosicao = posicaoAtualFita; // para que seja possivel inserir no historico
		String auxiliarCaracterFita = getCaracterFita(posicaoAtualFita);
		getNovaFita(novoSimboloString, posicaoAtualFita); // atualiza a fita
		setFitaView();
		System.out.println("valor da coluna: " + getCaracterFita(posicaoAtualFita) + " linha: " + estadoAtual);
		
		posicaoAtualFita = getPosicao(acao.getDirecao(), posicaoAtualFita); // atualiza a variavel antes de obter na matriz
		acao = matrizAcoes.getAcao(getCaracterFita(posicaoAtualFita), estadoAtual); // obtem a nova acao
		System.out.println("final: " + fita);
		
		setFitaView();
		setHistoricoEstadosView(auxiliarCaracterFita, posicaoAtualFita, acao.getEstadoDestino(), acao.getDirecao(), acao.isFimPrograma());
		
		try{
			JOptionPane.showMessageDialog(frame, "Vai atualizar a fita agora");
			Thread.sleep(1000);
		} catch (InterruptedException ex) {
			throw new InterruptedException();
		}
	}
	
	JOptionPane.showMessageDialog(frame, "Fim da Fita");
}
jacoboliveira

Fala Tiago faz o seguinte dá um print na sua tela, mostra o código que esta no seu método setFitaView, e de acordo com a tela o código diz exatamente o que Vc quer que seu código faça

Criado 15 de junho de 2016
Ultima resposta 15 de jun. de 2016
Respostas 3
Participantes 3