Pessoal, gostaria de saber se alguém já passou por esta necessidade ou que saiba e possa me ajudar:
Hoje tenho uma classe que pega o horário do servidor do banco de dados e através desta eu atualizo na tela para o usuário, so que a cada segundo eu instancio um novo objeto desta classe para que possa atualizar a data e hora novamente e disponibiliza-la na tela. Gostaria de fazer assim:
No inicio faço uma pesquisa no servidor de banco de dados e pegoa data/hora e atualizar um objeto, exemplo: calendar, com esta informação e a partir dai ele adiciona o tempo sem eu precisar ler novamente o banco.
[quote=SINVAL]Pessoal, gostaria de saber se alguém já passou por esta necessidade ou que saiba e possa me ajudar:
Hoje tenho uma classe que pega o horário do servidor do banco de dados e através desta eu atualizo na tela para o usuário, so que a cada segundo eu instancio um novo objeto desta classe para que possa atualizar a data e hora novamente e disponibiliza-la na tela. Gostaria de fazer assim:
No inicio faço uma pesquisa no servidor de banco de dados e pegoa data/hora e atualizar um objeto, exemplo: calendar, com esta informação e a partir dai ele adiciona o tempo sem eu precisar ler novamente o banco.
Deu para entender ? Alguém pode me ajudar ?[/quote]
na web ou desktop???
possiveis soluções:
web -> javascript
desktop -> Thread
Por “Java application” estou entendendo “desktop”. Então é o que o jgbt lhe falou (ponha uma java.swing.Timer ou java.util.Timer com período de 1 segundo, ou talvez de 0.5 segundo, alterando o texto de java.awt.Label ou java.swing.JLabel.). Não sei se você está usando AWT ou Swing ou SWT, por isso é que não dou detalhes maiores.
Thingol, realmente é desktop minhas transações, estou utilizando o swing para desenvolver as telas, mas como vc disse colocar um timer a cada segundo, mas a cada segundo iria ao banco de dados fazer uma leitura ? Exemplo: Select sysdate from dual; ou tem como fazer com que meu primeiro acesso atualize este “relogio” em memoria e a partir dai ele automaticamente seja atualizado sem ter que acessar o banco de dados a cada segundo.
Digamos que a data real está na variável Date dtReal = /* valor obtido a partir de SELECT SYSDATE FROM DUAL; */ e a data do computador está na variável Date dtComputador;
Você sabe que em um determinado momento, há uma diferença entre elas que deve permanecer aproximadamente constante com o passar do tempo. Ou seja, se agora no seu servidor são 10:54, o seu computador está marcando 10:52, e se no servidor forem 11:37, no seu computador deve marcar 11:35 (ou seja, ele sempre deve estar atrasado ou adiantado por um valor constante, que é nesse caso é 2 minutos = 120 seg = 120000 milissegundos).
A idéia é obter esse valor do atraso quando você puxar a data do SQL.
Sempre que você mostrar a data na tela, obter a data com new Date(), somar ou subtrair do valor do atraso, para você mostrar a data que você estima que seja. Então se agora new Date() retornar 12:45, subtrair os 120000 ms e você vai mostrar 12:43 na tela.