Agendamento para desligamento de pc [RESOLVIDO]

2 respostas
R

Pessoal, sou novo aqui, e já venho dar trabalho pra vocês, mas vamos lá:

Eu estou fazendo um programa que desligue o meu pc na data que eu agendar(sei que tem programas que fazem isso, mas quero fazer eu o meu), a parte de mostrar a data e hora na tela eu fiz, a parte do desligamento eu também fiz, minha dúvida é como faço pra executar o comando de desligamento na data que o usuário digitou, meu problemas:

1 - Não consigo comparar a data do sistema com a data digitada pelo usuario(Que é um JFormattedTextField)
2 - Se eu conseguir fazer a comparação, como faço pra executar apenas na data comparada, uso um laço de repetição pra ficar comparando? :s

trecho do código:

public class agendamento extends Thread { 
	private JLabel hr;
	private boolean mostrarData;
	private SimpleDateFormat sdf;
	private StringBuffer data;
	
	public agendamento (JLabel hora) {  
		this.hr = hora;
	}
	
	public void mostrarData(boolean mostrar) { 
		if(mostrar) {  
			this.mostrarData = true; 
			} else { 
				this.mostrarData = false; 
				} 
		
	} public void run()
	  {
		try {       
			while (true) { 
				Date d = new Date();
				data = new StringBuffer();  
				if(mostrarData) {  
					SimpleDateFormat sdfData = new SimpleDateFormat("dd.MM.yyyy");    
					data.append(sdfData.format(d));       
					data.append(" - ");             }   
					sdf = new SimpleDateFormat("HH:mm");  
					this.hr.setText(data.toString() + sdf.format(d)); 
					Thread.sleep(1000);       
					this.hr.revalidate();
				}  
			} catch (InterruptedException ex) {   
					//TODO   
			 }
	  }
	
	public void desligarPc(String horario)
	{
               //Aqui é onde é feito o desligamento, o String horario é o horario que o usuario passou (por enquanto estou apenas mexendo com, horas e não data)
              //Falta a comparação pra entra nesse trecho e a repetição(acho que é repetição), mas não sei como fazer
                try {				
			Runtime.getRuntime().exec("rundll32.exe user.exe,ExitWindows");
			Runtime.getRuntime().exec("shutdown -s -t 10"); 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
		} 			
	}

Obrigado desde já pela ajuda!

2 Respostas

maior_abandonado

1 - vc pode usar o método parse de SimpleDateFormat para transformar a sua String num Date e pegar a hora e o minuto desse Date para comparar com os agendados.

2 - sim, cria uma thread a parte (uma thread Daemon por exemplo) com um if que compare a hora do sistema com a de agendamento um loop, caso não seja hora e minuto corretos da um Thread.sleeep(60000);//1 minuto, quando for a hora de desligar vc chama seu método que faz isso… não se preocupe com o desempenho disso.

R

Blza cara me ajuda bastante, não vai da tempo de por em pratica hoje, mas entendi seu raciocinio acho q vai da certo sim!

Agradecido!

Criado 24 de agosto de 2009
Ultima resposta 24 de ago. de 2009
Respostas 2
Participantes 2