Timer erstellen

Equated

Mitglied
Hallo Community,

die Klasse Timer und ihre Methode schedule, womit man zeitlich geplante Befehle laufen lassen kann, beschäftigt mich schon einige Zeit (hoffe ich schreibe nichts Falsches). Deshalb wollte ich einen Timer erstellen und mit dem Runner und der selbstgeschrieben Klasse gab es auch keine Porbleme, allerdings wollte ich noch die GUI hinzufügen und das ist das Ergebnis:

Java:
import java.util.*;

import javax.swing.JFrame;
import javax.swing.JOptionPane;



public class TimerCode extends TimerTask {

   private int sec;
   private String sekunden; //Hilfsvariable
   private int min;
   private String minuten; //Hilfsvariable
   private int h;
   private String stunden; //Hilfsvariable
   
   private String time;
   
   
   public TimerCode()
   {
     this.sec=0;
     this.min=0;
     this.h=0;
     this.time="00:00:00";
   }
   
   public TimerCode(int sec, int min, int h)
   {
     this.sec=sec;
     this.min=min;
     this.h=h;
   }
   
   
   /*
    *  Getter und Setter Klassenattribute
    */
   
   public int getSec() {
     return sec;
   }



   public void setSec(int sec) {
     this.sec = sec;
   }



   public int getMin() {
     return min;
   }



   public void setMin(int min) {
     this.min = min;
   }



   public int getH() {
     return h;
   }



   public void setH(int h) {
     this.h = h;
   }



   public String getTime() {
     return time;
   }



   public void setTime(String time) {
     this.time = time;
   }
   
   
   
//String-Attribute

   public String getSekunden() {
     return sekunden;
   }

   public void setSekunden(int sekunde) {
     
     if(sekunde<10)
     {
       sekunden="0"+sekunde;
     }
     
     else
     {
       sekunden=""+sekunde;
     }
   }

   public String getMinuten() {
     return minuten;
   }

   public void setMinuten(int minute) {
     
     if(minute<10)
     {
       minuten="0"+minute;
     }
     
     else
     {
       minuten=""+minute;
     }
   }

   public String getStunden() {
     return stunden;
   }

   public void setStunden(int stunde) {
     
     if(stunde<10)
     {
       stunden="0"+stunde;
     }
     
     else
     {
       stunden=""+stunde;
     }
     
   }

   public void run() {
     
     sec=sec+1;
     setSekunden(sec);
     int sekundenrest=sec%60;
     
     min=sec/60;
     setMinuten(min);
     int minutenrest=min%60;
     
     h=min/60;
     setStunden(h);
     
     if(sec>=60 && min<60)
     {
       setSekunden(sekundenrest);
       System.out.println(stunden+":"+minuten+":"+sekunden);
     }
     
     
     if(min>=60)
     {
       setSekunden(sekundenrest);
       setMinuten(minutenrest);
       System.out.println(stunden+":"+minuten+":"+sekunden);
     }
     
   /*   else
     {
       System.out.println(stunden+":"+minuten+":"+sekunden);
     }*/
     
     
     if(h>=10)
       
     {
       JFrame frame=new JFrame();
       JOptionPane.showMessageDialog(frame,"Die Stoppuhr läuft schon zehn Stunden. Die Uhr wird gestoppt!");
       
     }
     
       
     
   
     
     
     
     
     
     
     
     
   }

}
-------------------------------------------------------------------------------------

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;

import javax.swing.JButton;
import javax.swing.JFrame;


public class TimerGUI implements ActionListener {
   
   private Clocktimer clocktimer;
   private JFrame frame;
   private JButton buttonstart;
   
   
   
   public TimerGUI()
   {
     clocktimer=new Clocktimer();
     frame=new JFrame();
     frame.setSize(500,350);
     frame.setResizable(false);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setLayout(null);
     
     buttonstart=new JButton("start");
     buttonstart.setBounds(50, 250,100,30);
     buttonstart.addActionListener(this);
     frame.add(buttonstart);
     
     clocktimer.getCanvasclock().setBounds(0,0,500,200);
     frame.add(clocktimer.getCanvasclock());
     
     
     frame.setVisible(true);
   }



   @Override
   public void actionPerformed(ActionEvent event) {
     
     if(event.getSource()==this.buttonstart)
     {
       clocktimer.getCanvasclock().getTiming().schedule(clocktimer,1000,1000);
     }
     
   }
   
   

}
-------------------------------------------------------------------------------------

import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;



public class Canvasclock extends Canvas {
   
   private TimerCode timer;
   private Timer timing;
   //private Canvas canvas;
   
   public Canvasclock()
   {
     //canvas=new Canvas();
     this.setBackground(Color.black);
     
     timer=new TimerCode();
     timing=new Timer();
     
   }
   
   public void paint(Graphics g)
   {
     g.setColor(Color.green);
     
     
     timing.schedule(timer,1000,1000);
     g.drawString(timer.getTime(),50,50);
     
     
   }
   
   public void run()
   {
     this.repaint();
   }

   public TimerCode getTimer() {
     return timer;
   }

   public void setTimer(TimerCode timer) {
     this.timer = timer;
   }

   public Timer getTiming() {
     return timing;
   }

   public void setTiming(Timer timing) {
     this.timing = timing;
   }

   
   
   

}
------------------------------------------------------------------------------------

import java.util.TimerTask;


public class Clocktimer extends TimerTask {

   private Canvasclock canvasclock;
   
   
   public Clocktimer()
   {
     canvasclock=new Canvasclock();
   }
   
   
   
   public Canvasclock getCanvasclock() {
     return canvasclock;
   }

   public void setCanvasclock(Canvasclock canvasclock) {
     this.canvasclock = canvasclock;
   }
   
   
   
   @Override
   public void run() {
     
     
     canvasclock.repaint();
     
   }
   
   ------------------------------------------------------------------------------------------

import java.util.Timer;


public class Runner {

   public static void main(String[] args) {
     
     /*Timer timer=new Timer();
     TimerCode code=new TimerCode(35980,0,0);
     timer.schedule(code,1000,1000);*/
     
     TimerGUI gui=new TimerGUI();
   
     

     
   }

}


   
   

}

Naja ist ein bisschen lang geworden. Auf jeden Fall treten Fehler auf wie z.B.
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Task already scheduled or cancelled
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)

Kurz zu dem was ich genau machen wollte: ein Canvas wird dem GUI-Frame hinzugefügt. bei der Betätigung des Start-Buttons vom GUI soll mit dem timer.schedule (heißt im Code anders)
das Canvas "repaintet" werden. Das heißt konkret, dass ich diesen Befehl sowohl für den Timer, als auch für das Updaten des Canvas benutze.

Kann mir jemand bitte helfen? Ich bin nicht der Schnellste und nicht der Klügste, aber Programmieren macht mir Spaß. Ich zerbrech mir den Kopf schon seit 2 Tagen...
(Danke im Voraus!!! )
 

Meniskusschaden

Top Contributor
Die paint-Methode ist kein guter Platz, um den Timer zu starten, denn sie wird mehrmals aufgerufen und versucht deshalb beim zweiten Aufruf, den beim ersten Aufruf bereits gestarteten Timer erneut zu starten.
 

XyMorgan

Aktives Mitglied
Du rufst selber die Methode canvasclock.repaint() auf, repaint() wird intern immer paint() aufrufen, und da du dort den selben TimerTask nochmals starten willst gibt es die Exception. Der Task darf nur einmal hinzugefügt werden.

Passend zu deinem Code:
timer = new TimerCode aus dem Constructor raus

und in der paint(..)
if (timer == null) {
timer = new TimerCode
timing.schedule(timer,1000,1000);
}


besser:
aus der paint(..) raus und mit zum ActionListener von deinem Button und beide TimerTasks da starten.

oder (wenn das delay für beide gleich bleibt) nur einen TimerTask und beides erledigen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Delayed Timer erstellen Java Basics - Anfänger-Themen 3
W Timer erstellen Java Basics - Anfänger-Themen 2
G Timer erstellen. Aber wie? Java Basics - Anfänger-Themen 3
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
C Timer aktualisieren Java Basics - Anfänger-Themen 5
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
missy72 Timer oder Timeline Java Basics - Anfänger-Themen 3
R Timer Format: 00:00:00 Java Basics - Anfänger-Themen 29
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
D Änder der Timer Speeds Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
L Methoden Timer Java Basics - Anfänger-Themen 9
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
S Timer reseten Java Basics - Anfänger-Themen 3
T Timer stoppt zu früh Java Basics - Anfänger-Themen 7
CptK Methoden Timer & Mathematischer Denkfehler Java Basics - Anfänger-Themen 7
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
D Timer programmieren Java Basics - Anfänger-Themen 13
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
J Timer richtig pausieren Java Basics - Anfänger-Themen 2
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
S actionlistener timer Java Basics - Anfänger-Themen 9
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
S timer mit imagedatei Java Basics - Anfänger-Themen 5
S timer Java Basics - Anfänger-Themen 0
V Java Uitil Timer Stoppt nicht Java Basics - Anfänger-Themen 2
KaffeeFan Timer beenden Java Basics - Anfänger-Themen 12
K Ampelsteuerung mit Timer Java Basics - Anfänger-Themen 8
F Array und Timer Java Basics - Anfänger-Themen 2
G Timer einsetzen Java Basics - Anfänger-Themen 2
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
F Timer beendet nicht immer Java Basics - Anfänger-Themen 2
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
T Timer - HILFE Java Basics - Anfänger-Themen 10
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Schneller Timer Java Basics - Anfänger-Themen 2
C Timer aus anderer Klasse stoppen/starten Java Basics - Anfänger-Themen 3
B Timer beenden? Java Basics - Anfänger-Themen 0
G Erste Schritte Timer: In einem festgelegten Intervall eine Methode ausführen Java Basics - Anfänger-Themen 6
M Timer / Thread Java Basics - Anfänger-Themen 43
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
J Swing Timer Java Basics - Anfänger-Themen 3
M Einfacher Timer ;) Java Basics - Anfänger-Themen 15
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
C Methoden Einen Timer einbauen, aber wie? Java Basics - Anfänger-Themen 5
B Timer Java Basics - Anfänger-Themen 25
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
S Erste Schritte Java Timer Java Basics - Anfänger-Themen 13
E Threads Timer Java Basics - Anfänger-Themen 6
Spin KI Anfänger Frage : Timer Problem Java Basics - Anfänger-Themen 6
F Prüfen ob timer läuft Java Basics - Anfänger-Themen 6
L Erste Schritte Timer und Zugriffsattribute Java Basics - Anfänger-Themen 5
M Audio + Timer Java Basics - Anfänger-Themen 12
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
R Klassen MemorySpiel: brauche Timer Java Basics - Anfänger-Themen 3
D Timer in Applet Java Basics - Anfänger-Themen 2
ruerob Warum ist Timer schneller als While? Java Basics - Anfänger-Themen 9
F Java Timer Frage Java Basics - Anfänger-Themen 14
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
B Timer Java Basics - Anfänger-Themen 2
S timer task problem Java Basics - Anfänger-Themen 2
C Überprüfen, ob Timer läuft Java Basics - Anfänger-Themen 3
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
Luk10 Problem mit vielen Timer(-Events) Java Basics - Anfänger-Themen 17
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
M Timer: period während Verlauf wechseln Java Basics - Anfänger-Themen 12
M Timer unterbrechen? Wo ist mein Thread? Java Basics - Anfänger-Themen 2
L Timer innerhalb eines Threads Java Basics - Anfänger-Themen 3
P Java Timer Java Basics - Anfänger-Themen 2
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
B problem mit timer/timertask, Farbverlauf Java Basics - Anfänger-Themen 10
Piwi Timer bei Programmende beenden Java Basics - Anfänger-Themen 25
T zweiter Timer überschreibt den ersten Timer ? Java Basics - Anfänger-Themen 5
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
C Regelmäßigen Timer bei Zeitüberschreitung nacheinander abarbeiten Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
H Timer Java Basics - Anfänger-Themen 3
dl85hej Zeitsitschleife anstatt Timer Java Basics - Anfänger-Themen 5
G Klasse mit Timer nicht beenden Java Basics - Anfänger-Themen 6
S Timer / TimerTask Frage Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben