Boa tarde pessoal!!
Sou novo aqui no fórum e estou com um problema, e gostaria, se possível, que alguém me ajudasse a solucioná-lo.
É o seguinte, eu desenvolvi um programa para a empresa onde eu trabalho que verifica se um determinado relatório foi executado num servidor (esse relatório é executado de hora em hora). Se o relatório executou com sucesso, ele adiciona uma linha num arquivo txt (uma espécie de log) informando que o mesmo rodou com sucesso, caso o relatório não execute ele, além de adicionar o registro no arquivo de log, exibe um popup informando que o mesmo não rodou. Para saber se o relatório rodou ou não o programa acessa o arquivo do relatório via rede, de hora em hora, e verifica a sua hora de modificação, para isso eu utilizo o comando calendar.get(Calendar.HOUR_OF_DAY) para capturar a hora atual do sistema e file.lastModified(); para capturar a hora da última modificação do arquivo.
Eu desenvolvi esse programa já tem uns 2 meses e ele vinha funcionando perfeitamente, até uns três dias atrás quando começou a apresentar problemas, os comandos citados acima não estão capturando a hora atual do sistema nem a hora de modificação de forma correta, eu fiz um teste e imprimir no console do Eclipse as saídas desses dois comandos e pude verificar que realmente eles estão divergindo da hora real do sistema. Não sei o que está acontecendo. Gostaria de saber se alguém sabe de algum relato de problema parecido com este, se estes comandos costumam apresentar problema.
Se alguém tiver alguma informação que puder me ajudar, agradeço.
Segue código da classe que contém os comandos que capturam a hora atual do sistema e a hora de modificação do arquivo:
/**
* Classe responsável por armazenar e executar a tarefa
* @author Luciano Matheus
*/
import java.io.File;
import java.io.IOException;
import java.awt.Toolkit;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimerTask;
import javax.swing.JOptionPane;
public class Tarefa extends TimerTask{
public void run(){
//Executa a atividade para a tarefa
try {
this.Atividade();
} catch (IOException e) {
e.printStackTrace();
}
}
//Método com as atividades a serem executadas pela tarefa
public void Atividade() throws IOException{
int horaAtual; //armazena a hora atual do sistema no momento da execução da tarefa
String dataAtual;
String hora;
String arquivoOTM;
String horaModificacao = "";
String registro;
//variável que armazena o caminho do arquivo do servidor OTM
//cuja hora de modificação será verificada para saber se
//o relatório foi executado naquela hora
arquivoOTM = "x:\Nortel\Common Data\Brasil Center\MCE 81CPPII\TFS001.DAT";
//captura a hora atual do sistema no momento da execução da tarefa
Calendar calendar = new GregorianCalendar();
Date trialTime = new Date();
calendar.setTime(trialTime);
horaAtual = calendar.get(Calendar.HOUR_OF_DAY);
//incrementando a hora atual pq a hora de modificação do arquivo está adiantada em 1 hora
if (horaAtual == 23){
horaAtual = 0;
}
else
{
horaAtual = calendar.get(Calendar.HOUR_OF_DAY)+1;
}
if(horaAtual>=0 && horaAtual<=9){
hora = "0"+horaAtual;
}
else
{
hora = Integer.toString(horaAtual);
}
//instanciando a classe File para acessar o arquivo contido na variável arquivoOTM
File file = new File(arquivoOTM);
//verifica se o arquivo existe ou está acessível
if (!file.exists()){
JOptionPane.showMessageDialog(null, "Erro ao tentar abrir arquivo do OTM. Verifique se a unidade: X: \10.24.16.158\d$ está mapeada");
System.exit(0);
}
else
{
//armazena em l a hora da última modificação do arquivo
long l = file.lastModified();
Date d = new Date(l);
Date data = new Date();
//formata a hora para somente hora e minuto e armazena em horaModificacao
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
horaModificacao = sdf.format(d);
//formata a data que será exibida e armazena em dataAtual
SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyy");
dataAtual = sdf2.format(data);
//compara a hora de modificação do arquivo com a horaAtual:05 min, horaAtual:06 min e horaAtual:07 min
//se a hora da última modificação do arquivo for igual a uma das três horas (hh:05 ou hh:06 ou hh:07)
//então significa que o relatório rodou com sucesso
//caso contrário significa que o mesmo não rodou naquele horário
if (horaModificacao.equalsIgnoreCase(hora + ":05")||horaModificacao.equalsIgnoreCase(hora + ":06")||horaModificacao.equalsIgnoreCase(hora + ":07")){
registro = dataAtual + " " + calendar.get(Calendar.HOUR_OF_DAY) + ":08 - Relatório OTM rodou com sucesso";
//adiciona um registro na lista
Principal.janela.listaPadrao.addElement(registro);
//grava uma linha no arquivo log_otm
Principal.arquivo.escreverArquivo(registro,true);
Principal.janela.getContentPane().invalidate();
Principal.janela.getContentPane().validate();
}
else
{
registro = dataAtual + " " + calendar.get(Calendar.HOUR_OF_DAY) + ":08 - RELATÓRIO OTM NÃO RODOU!!";
//adiciona um registro na lista
Principal.janela.listaPadrao.addElement(registro);
//grava uma linha no arquivo log_otm
Principal.arquivo.escreverArquivo(registro,true);
Principal.janela.getContentPane().invalidate();
Principal.janela.getContentPane().validate();
//Exibe a janela para o usuário
Principal.janela.setVisible(true);
//A janela fica piscando até ser aberta
Principal.janela.toFront();
//exibe mensagem para o usuário e toca um beep
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null, "RELATÓRIO OTM NÃO RODOU!!");
}
}
}
}