tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
1245
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lautsprecher Lautsprecher ist offline Mitglied Gold
    Registriert seit
    Jun 2005
    Beiträge
    246
    Hi,
    ich möchte später mal jede volle Stunde meine Datenbank checken und gegebenenfalls ein Update ausführe. Momentan bin ich noch am Testen und Üben ob es überhaupt funktioniert.
    Ich habe mir dafür folgende Methode ausgedacht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    /*Dekl. in der Klasse */
    public int wakeHour = 0;
    public  int wakeMinute = 0;
    public final int wakeSecond = 30;
     
     
    public void arbeitszeitcheck() 
     {
         Thread sanduhr = new Thread()
         {
              public void run()
              {
        boolean checked = false;
        boolean schleife = true;
            while (schleife)
        { 
            Calendar cal = new GregorianCalendar();
            wakeHour = cal.get(Calendar.HOUR_OF_DAY);   
            wakeMinute = cal.get(Calendar.MINUTE);
            cal.setTime(new Date());
            if(cal.get(Calendar.HOUR_OF_DAY) == wakeHour &&
               cal.get(Calendar.MINUTE) == wakeMinute &&                        cal.get(Calendar.SECOND) == wakeSecond)  
           {
               if (!checked)
               {
                    System.out.println("ES GEHT, JUHU DA WAHNSINN !!");
                    checked = true;
                }
          }
                }
           };
          sanduhr.start();
          pack();
     }

    Zum Prüfen ob's überhaupt geht, wollte ich jede Minute eine Consolen-Meldung ausgeben.
    Den Schalter checked setzte ich damit die Ausgabe nur 1 x kommt. Zuvor hatte ich immer das Problem, wenn die If-Bedigung mit der Zeit übereinstimmt..... -> Es eine
    Endlos-Ausgabe in der Console gab.
    Jetzt jedoch habe ich das Problem, dass es nur in der 1. Minute klappt, danach komme ich nicht mehr in meine if-Schleife (!checked) was ja logisch ist. Ich habe auch schon versucht unter checked = true noch einen schalter = false für die while-Schleife einzubauen. und dann über sanduhr.start() diesen Schalter wieder auf true zu setzen.
    Jedoch wird die while-Schleife nicht mehr aufgerufen.

    Weiß vielleicht jemand wo noch der Wurm drin ist
    Danke
     

  2. #2
    TommyMo TommyMo ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    261
    Hi!

    Ich hab zwar noch nie mit Threads programmiert, aber was würde gegen einen Timer sprechen? Die Klasse wäre in der Java API schon vorhanden, und würde genau deinen Zwecken, wenn ich sie richtig verstanden hab , genügen, oder? Sollte doch reichen auf einen "Tick" alle Stunden zu reagieren, und dann mit dem Abchecken auf Änderungen zu beginnen.

    Aber wie gesagt, ich hab noch nicht viel mit Threads zu tun gehabt, und lieg wahrscheinlich daneben

    Gruß
    TOM
     
    alles Gute kommt von ...

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Siehe auch hier:
    http://www.tutorials.de/tutorials225750.html

    Gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  4. #4
    Lautsprecher Lautsprecher ist offline Mitglied Gold
    Registriert seit
    Jun 2005
    Beiträge
    246
    Hi Thomas,
    dein Link klingt interessant, jedoch habe ich ein wenig Probleme wie ich das auf eine Volle Stunde umbasteln soll. Wäre nett wenn Du mir da nochmal helfen könntest.
    Für was steht denn zum Beispiel bei INTERVAL_ONE_WEEK die 1000
     

  5. #5
    Lautsprecher Lautsprecher ist offline Mitglied Gold
    Registriert seit
    Jun 2005
    Beiträge
    246
    Hi,
    ich habe jetzt mein Problem gelöst. Vielleicht etwas umständlich. Wäre sicher schöner gegangen aber ich bin zufrieden. Es läuft wenigstens. Vielleicht ist es dem einen oder anderem mal eine Hilfe.

    Grüße




    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    import java.util.GregorianCalendar;
    import java.util.Calendar;
     
     
    public class TimerTaskExample {
        
    public static void main(String[] args) throws Exception{
    Timer timer = new Timer();
            
    //Jede Minute
    final long INTERVAL_ONE_WEEK = 60*1000;
    int wakeHour   = 0;
    int wakeMinute = 0;
    int wakeDay = 0;
    int wakeMonth = 0;
    int wakeYear = 0;
    String datumzusammensetzen = null;
     
    Calendar cal = new GregorianCalendar();
    wakeMinute = cal.get(Calendar.MINUTE);
    wakeHour = cal.get(Calendar.HOUR_OF_DAY);
    wakeDay = cal.get(Calendar.DAY_OF_MONTH);
    wakeMonth = cal.get(Calendar.MONTH);
            
    // zählt Monat von 0 bis 11
    wakeMonth = wakeMonth + 1;
    wakeYear = cal.get(Calendar.YEAR);
    System.out.println(wakeMinute + " Das sind die Minuten");
    System.out.println(wakeHour + " Das sind die Stunden");
    System.out.println(wakeDay + " Das ist der Tag");
    System.out.println(wakeMonth + " Das ist der Monat");
    System.out.println(wakeYear + " Das ist das Jahr");
    datumzusammensetzen = 
    Integer.toString(wakeDay) + "." + Integer.toString(wakeMonth) + "." + Integer.toString(wakeYear) + " " +Integer.toString(wakeHour) + ":" + Integer.toString(wakeMinute);
     
    System.out.println(datumzusammensetzen + "  zusammengesetzt");
        
    Date startTime = new SimpleDateFormat("dd.MM.yyyy HH:mm").parse(datumzusammensetzen);
    System.out.println(startTime);
            
    timer.scheduleAtFixedRate(new TimerTask() {
        int i= 0;
        public void run()
        {   
                        i++;
            System.out.println(i +". Minute");
        }
    }, startTime, INTERVAL_ONE_WEEK);
     
    }
     
    }
     

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Die 1000 steht fuer 1000 Millisekunden...

    Gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 21.06.09, 21:12
  2. Code jede Stunde ausführen?
    Von no4na im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 13.02.08, 07:32
  3. Jede Stunde aktualisieren
    Von kerian im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 14.02.04, 13:30
  4. automatische URL öffnen - jede stunde
    Von mevo im Forum Internet, DSL & Flatrate
    Antworten: 6
    Letzter Beitrag: 26.01.04, 13:48
  5. selectfeld "f[f_select]" soll bei änderung ne aktion ausführen
    Von Mr. FISHMAN im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 25.10.03, 19:38