Aew pessoal, fiz uma aplicação que exibe uma janela com algumas informações e de acordo com o processamento ela vai atualizando e mostrando para o usuário oque está acontecendo, não vou postar o código aqui pq qualquer código faz a mesma coisa, até mesmo se eu usar o Thread.sleep a janela fica totalmente travada.
Eu aperto o botão “Iniciar” na janela que eu fiz, e fica travada a janela até que termina de fazer a operação, mas eu queria que ficasse atualizando e inclusive tem até uma progressBar informando o quanto falta para concluir(na progressBar não utilizei o processamento da Thread, usei apenas o índice do for como referência).
Estou começando a pensar que para funcionar da forma que eu quero (enquanto está processando ir exibindo na janela swing) é preciso criar outra Thread e ficar uma para o processamento e outra para exibir na tela, é isso mesmo?
Se quiser que eu coloque mesmo o código tudo bem, mas não acho que seja realmente necessário.
Sim, é necessário fazer isso via Threads
Olá Thiago, sua breve ajuda foi muito útil, consegui implementar o código utilizando outra thread e funcionou perfeitamente, porém agora estou com uma nova dúvida, enquanto há o processamento na outra thread, preciso inserir um botão “Abortar” para cancelar o processamento da nova thread, como devo fazer isto?
E enquanto a outra thread está fazendo o processamento, ela está gerando um relatório em um jTextArea utilizando-se de um stringBuffer.append, ou seja, inserindo no fim da jTextArea, acontece que fica inserindo corretamente, mas a barra de rolagem não segue junto, como posso fazer com que a barra de rolagem siga o texto?
Agradeço desde já.
Consegui resolver o problema de cancelar a Thread, dentro da nova Thread há um loop (while) coloquei na condição uma variável boolean, e quando apertar o botão “Abortar” , o mesmo irá alterar o estado da variável boolean para true automaticamente cancelando o loop da outra Thread.
A única dúvida que me resta é como fazer a barra de rolagem do jTextArea sempre estar no final.
Se eu bem me lembro é isso
JTextArea j = new JTextArea();
String text = j.getText();
int pos = 0;
if (text != null)
pos = text.length();
j.setCaretPosition(pos);
Vlw, resolvi com o:
Todas as dúvidas foram resolvidas, muito obrigado pela sua ajuda.
Esse é o típico caso em que se usa a classe SwingWorker para fazer as tarefas em “background”.
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html