Como posso atualizar dados em um intervalo utilizando Java …por exemplo o programa vai fazer uma leitura e vai armazenar em X, passados os 60 segundos ele faz uma nova leitura e armazena em Y… e por ai vai
Com uma Thread, pesquise por Thread e Runnable em Java.
Tens algum exemplo de como fazer ?
import java.util.Timer;
import java.util.TimerTask;
public class Exemplo {
public static void main(String[] args) {
Exemplo programa = new Exemplo();
programa.executar();
}
private void executar() {
TimerTask tarefaRepetitiva = new TimerTask() {
@Override
public void run() {
atualizarDados();
}
};
long intervalo = 60000;
Timer timer = new Timer();
timer.schedule(tarefaRepetitiva, intervalo);
}
private void atualizarDados() {
// aqui você implementa a sua atualização dos dados
}
}
Tentei fazer isso mas ele me joga a seguinte exceção:
Exception in thread “main” java.lang.NumberFormatException: For input string: "4071131613"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at com.G2.SNMP.client.SNMPManager.totalBytesXY(SNMPManager.java:250)
at com.G2.SNMP.client.SNMPManager.main(SNMPManager.java:62)
O código do @staroski não causaria isso, essa exception é porque você tentou - em alguma parte do seu código - converter para Int a string “4071131613” e deu errado.
Integer.parseInt("4071131613");
gera esse erro, mas Long.parseLong("4071131613");
não gera, o que significa que “4071131613” deve ser um número maior do que cabe em um int: Integer.MAX_VALUE
retorna 2147483647
O problema ocorre aí, vai lá e concerta, seja usando long ou BigInteger, ou mudando a lógica pros valores não serem tão grandes
Estou trabalhando em uma aplicação SNMP e preciso calcular o total de bytes recebidos e enviados em um intervalo de tempo entre x e y numa interface de rede.
total de bytes = (ifInOctets_y - ifInOctets_x) + (ifOutOctets_y - ifOutOctets_x)
Sendo assim o programa vai fazer uma leitura e vai armazenar em X, passados os 60 segundos ele faz uma nova leitura e armazena em Y. Porem não estou conseguindo obter o valor nesse intervalo de tempo
Alguém pode me ajudar com algum exemplo ?
Não tenho conhecimento sobre isso aí não, mas acho melhor te deixar consciente de algumas coisas:
- Não vejo como você conseguiria fazer o intervalo de “60 segundos” ser exato, porque Threads não garantem isso (você manda uma Thread dormir 60s e quando acordar realizar a tarefa, mas, ela provavelmente irá acordar um pouco depois dos 60s [depende do Agendador da JVM chamar ela, acho até que depende do Sistema Operacional])
- Você pode medir a passem de tempo com uma boa precisão usando
System.nanoTime()
; Isso te permitiria saber quanto tempo se passou desde a última leitura com uma boa precisão; - “x” e “y” são instantes de tempo? Esse me parece um nome nada sugestivo pra isso. Pra mim X e Y se encaixam bem em coordenadas no Plano Cartesiano ou em 3D. Que tal nomes como “instanteInicial” e “instanteFinal”?
Talvez o código possa ser mais ou menos assim:
while (isContinuarVerificando) {
verificar(); //É executado a cada 60s (aproximadamente, o intervalo será >=60s)
Thread.sleep(60000); //Isso precisa ser colocado em try/catch, ou relance a Exception
}