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:
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!!! )
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!!! )