Web Service (Quase lá!)

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!!!