Não consigo atualizar o layout por um processo que esta dentro de uma thead
3 respostas
java
T
Tiago_Aleff_da_Silva
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.
Posta o código pra gente dá uma olhada, por favor. Só com o texto está meio difícil entender esse seu problema.
T
Tiago_Aleff_da_Silva
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.
publicvoidexecutarAnaliseEmFita()throwsInterruptedException{booleanfimDePrograma=true;System.out.println(matrizAcoes.toString());StringnovoSimboloString="";StringauxilixarString="";StringdirecaoString="";intposicaoAtualFita=0;Stringhistorico="";// (estado lido, simbolo lido) -> (estado destino, simbolo gravado, direcao)for(Componenti:frame.getComponents()){i.repaint();}CelulaObjectacao=newCelulaObject();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);intauxiliarPosicao=posicaoAtualFita;// para que seja possivel inserir no historicoStringauxiliarCaracterFita=getCaracterFita(posicaoAtualFita);getNovaFita(novoSimboloString,posicaoAtualFita);// atualiza a fitasetFitaView();System.out.println("valor da coluna: "+getCaracterFita(posicaoAtualFita)+" linha: "+estadoAtual);posicaoAtualFita=getPosicao(acao.getDirecao(),posicaoAtualFita);// atualiza a variavel antes de obter na matrizacao=matrizAcoes.getAcao(getCaracterFita(posicaoAtualFita),estadoAtual);// obtem a nova acaoSystem.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(InterruptedExceptionex){thrownewInterruptedException();}}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