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.
Thread que executa de tempos em tempos, re-executando a chamada.
T
thingol
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.
B
Bruno_Leonardo
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.
T
thingol
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.
B
Bruno_Leonardo
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?
publicclassPrincipalFormextendsjavax.swing.JFrame{// Método ConstrutorpublicPrincipalForm(){initComponents();this.setExtendedState(MAXIMIZED_BOTH);// Maximiza a JanelaTimertimer;timer=newTimer(5000,newActionListener(){publicvoidactionPerformed(ActionEvente){// Tabela SituacaoAgenteSituacaoAgenteTableModeltableSituacaoAgente=newSituacaoAgenteTableModel();SituacaoAgenteWSwsSituacaoAgente=newSituacaoAgenteWS();//TesteAssincrono wsSituacaoAgente = new TesteAssincrono();tableSituacaoAgente.mostraResultado(wsSituacaoAgente.getSituacaoAgente());jXTableSituacaoAgente.setModel(tableSituacaoAgente);jXTableSituacaoAgente.updateUI();// Atualiza a view da table}});timer.start();}.................................................................................}
B
Bruno_Leonardo
Caro thingol,
Muito obrigado pela ajuda! Desse jeito aqui deu certo! Veleu!!!
B
Bruno_Leonardo
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?