Título: Comprobar la hora en java
Publicado por: Zoik en 28 Agosto 2013, 16:05 pm
Bien tengo una duda, quería hacer un programa en el cual a la 1 de la mañana me apagase el ordenador por temas de ahorrar luz.
Bien esto ya esta echo, lo e echo con un bucle que me comprueba constantemente que hora es, y en el momento que la hora se pone a 1, me sale del bucle y me inicializa el apagado, simple.
El problema que tengo es el siguiente, en el momento que me empieza el bucle me consume demasiados recursos, y me gustaría saber si hay algún método para poder comprobar la hora constantemente sin necesidad de gastar tanta máquina.
Un saludo y gracias de antemano.
Título: Re: Comprobar la hora en java
Publicado por: Juan. en 28 Agosto 2013, 16:15 pm
Claro que lo hay:
Tread.sleep(3600000);
Cada hora comprobará que hora es y ahorrará recursos
Título: Re: Comprobar la hora en java
Publicado por: 1mpuls0 en 28 Agosto 2013, 16:59 pm
Claro que lo hay:
Tread.sleep(3600000);
Cada hora comprobará que hora es y ahorrará recursos
Pero por ejemplo y si el programa inicia a las 11:30 a las 12:30 volverá a comprobar y de ahí hasta la 1:30 xD.
Título: Re: Comprobar la hora en java
Publicado por: 1mpuls0 en 28 Agosto 2013, 19:12 pm
Me pareció interesante y me dediqué a tirar código un rato xD /* * Autor: 1mpuls0 */ package basic; import java.util.Calendar; import java.text.SimpleDateFormat; import java.util.Date; import java.text.DateFormat; import java.text.ParseException; import java.lang.Thread; public class CheckTime { public static void main (String args []) { Date currentDate = getCurrentDate (); Date lastDate = stringToDate ("2013-08-28 12:10:20"); long diff = differenceTime(currentDate, lastDate); System. out. println(currentDate ); new ThreadShutdown(diff).run(); } public static long differenceTime (Date currentDate, Date lastDate ) { long msDifference = 0; long msCurrentDate = currentDate.getTime(); long msLastDate = lastDate.getTime(); if(msLastDate>msCurrentDate) msDifference = Math. abs(msCurrentDate - msLastDate ); return msDifference; } public static Date getCurrentDate () { currentDate = dateFormat.format(date); try { dateFormat.parse(currentDate); ex.printStackTrace(); } return date; } try { date = format.parse(strDate); date = getCurrentDate(); } return date; } } class ThreadShutdown implements Runnable { private long time = 0; public ThreadShutdown(long time) { this.time = time; thread.start(); } private void process() { System. out. println("APAGATE!!!"); } public void run() { try { thread.sleep(time); process(); } System. out. println("Error: "+ie ); } } }
Solo hacen falta un par de validaciones pero ya depende de que deseas que haga, por ejemplo cuando llegue a escribir la fecha de apagado menor a la fecha y hora actual. Espero que te funcione. Saludos.
Título: Re: Comprobar la hora en java
Publicado por: Zoik en 28 Agosto 2013, 21:46 pm
Bueno en media hora que e podido sacar me a salido esto, esto es lo que yo queria, esta un poco guarro, pero bueno ya lo pulire cuando tenga tiempo. Muchas gracias a los dos, que bonito es tu codigo Darhius xD. package main;
import graphicinterface.Interface;
import javax.swing.SwingUtilities;
import protocols.Timer;
public class Main {
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run(){ new Timer(); new Interface(); } }); }
}
package protocols;
import java.util.Calendar;
public class Timer { public Timer(){ protocolOfHour(); } public boolean protocolOfHour(){ Calendar calendario = Calendar.getInstance(); int hora; do{ try { Thread.sleep(100000); } catch (InterruptedException e) { e.printStackTrace(); } hora =calendario.get(Calendar.HOUR_OF_DAY); }while(hora!=1); return true; } }
package protocols;
import java.io.IOException;
public class Protocol { public Protocol(){ exec("REG ADD HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v ShutdownProgramado /t REG_SZ /f /d 'C:\\Users\\Zoik\\Documents\\shutdown.jar'"); exec("shutdown -p -f"); } private void exec(String cmd) { try { Runtime.getRuntime().exec(cmd); } catch (IOException e) { System.out.println("El apagado a fallado"); } } }
package graphicinterface;
import java.util.Timer; import java.util.TimerTask;
import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;
import protocols.Protocol;
public class Interface extends JFrame{ private static final long serialVersionUID = 1L; JLabel text = new JLabel(""); JPanel panel = new JPanel(); int segundos = 300; Timer timer; public Interface(){ setSize(300,35); setLocationRelativeTo(null); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setResizable(false); setUndecorated(true); setAlwaysOnTop(true); setVisible(true); addLabel(); contador(); } class RemindTask extends TimerTask { public void run() { segundos--; if(segundos < 0){ text.setText(String.valueOf("El ordenador se apagará en 0 segundos")); new Protocol(); }else{ text.setText(String.valueOf("El ordenador se apagará en "+segundos+" segundos")); } } } private void addLabel(){ panel.setBorder(BorderFactory.createLoweredBevelBorder()); add(panel); panel.add(text); } private void contador(){ timer = new Timer(); timer.schedule(new RemindTask(),0, 1*1000); } } Un saludo y gracias de nuevo. EDITO: ¿Como pongo el código con líneas numeradas como tu Darhius?
Título: Re: Comprobar la hora en java
Publicado por: 1mpuls0 en 28 Agosto 2013, 21:58 pm
Muchas gracias a los dos, que bonito es tu codigo Darhius xD.
Gracias. Aunque algunas librerías están de más y olvidé borrarlas, es que hice pruebas con Calendar Voy a mejorarlo y hacer pruebas entre timer y thread para ver cual resulta mejor en cuanto al consumo de recursos. Después de eso le pondré una interfaz ;D y postearé el código ya mejorado. EDITO: ¿Como pongo el código con líneas numeradas como tu Darhius?
Cuando respondes un mensaje hay un select que por default dice GeSHi ahí seleccionas el lenguaje y colocas el código dentro de las etiquetas que saldrán.
|