Galera,
Estou desenvolvendo um cliente j2se que consome os serviços de uma aplicação. Até aí tudo beleza, consigo consumir o serviço, mostrar o resultado na minha jtable, porém gostaria de atualizar esse resultado de 5 em 5 segundos, ou seja, de 5 em 5 segundos ele busca novamente o resultado e atualiza a jtable.
Estou tentando usar thread, porém gostaria de saber se existe outra alternativa. ESTOU UTILIZANDO JAX-WS.
Obrigado!!!
Thread que executa de tempos em tempos, re-executando a chamada.
Um javax.swing.Timer ou java.util.Timer é adequado para seu caso. (Elas usam internamente uma thread. Tome cuidado para seu método run (no caso de java.util.Timer, onde você estende a classe TimerTask) ou seu método actionPerformed (no caso de javax.swing.Timer, onde você implementa a interface ActionListener) não deixar escapar nenhuma RuntimeException, porque senão a thread que eles usam internamente “morre” e o timer pára de ser executado periodicamente.
Um javax.swing.Timer ou java.util.Timer é adequado para seu caso....
Duas dúvidas:
Seria mais adequado eu usar Timer na minha classe que acessa o Web Service, ou no formulário que exibe o resultado?
Vc pode dar um exemplo do uso do javax.swing.Timer que eu não tô coseguindo.
Isso é conforme a filosofia de seu programa. Se você quer amarrar o timer na interface gráfica (ela solicita periodicamente os dados chamando a classe que efetua a chamada de web services) não está errado; é que não sei se você separou o “model” do “controller” (se você estiver usando o modelo MVC).
Se você estiver usando MVC não é nem a interface gráfica nem a classe que chama os web services que deve chamar o timer, mas alguma outra coisa.
Caro thingol,
Não estou no trabalho e não tem como eu testar meu projeto, pois o serviço está na rede interna. Porém, se eu entendi sua sugestão, o código ficaria assim, ou está faltando alguma coisa?
[code]
public class PrincipalForm extends javax.swing.JFrame
{
// Método Construtor
public PrincipalForm()
{
initComponents();
this.setExtendedState(MAXIMIZED_BOTH); // Maximiza a Janela
Timer timer;
timer = new Timer (5000, new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// Tabela SituacaoAgente
SituacaoAgenteTableModel tableSituacaoAgente = new SituacaoAgenteTableModel();
SituacaoAgenteWS wsSituacaoAgente = new SituacaoAgenteWS();
//TesteAssincrono wsSituacaoAgente = new TesteAssincrono();
tableSituacaoAgente.mostraResultado(wsSituacaoAgente.getSituacaoAgente());
jXTableSituacaoAgente.setModel(tableSituacaoAgente);
jXTableSituacaoAgente.updateUI(); // Atualiza a view da table
}
});
timer.start();
}
…
…
…
}[/code]
Caro thingol,
Muito obrigado pela ajuda! Desse jeito aqui deu certo! Veleu!!!
Galera,
Como eu poderia melhorar a performance do sistema. Pois ele ficou meio lentão, o q já era de se esperar, pois o código do timer está no construtor do meu forimuário principal. Tem alguma sugestão?
Valeu!!!